একটি পরিষেবা হিসাবে স্প্রিং বুট অ্যাপ্লিকেশন


197

লিনাক্স সিস্টেমে এক্সিকিউটেবল জার হিসাবে প্যাকেজযুক্ত সুন্দরভাবে স্প্রিং বুট অ্যাপ্লিকেশনটি কীভাবে কনফিগার করবেন? এটি কি প্রস্তাবিত পদ্ধতির, নাকি আমার এই অ্যাপ্লিকেশনটিকে যুদ্ধে রূপান্তর করা উচিত এবং টমক্যাটে ইনস্টল করা উচিত?

বর্তমানে আমি screenসেশন থেকে স্প্রিং বুট অ্যাপ্লিকেশনটি চালাতে পারি , যা ভাল, তবে সার্ভার রিবুটের পরে ম্যানুয়াল শুরু করতে হবে।

আমি যা খুঁজছি তা হল সাধারণ পরামর্শ / দিকনির্দেশ বা নমুনা init.dস্ক্রিপ্ট, যদি এক্সিকিউটেবল জারের সাথে আমার দৃষ্টিভঙ্গি যথাযথ হয়।


শুরু করতে, আপনার বিতরণটি কি আপস্টার্ট বা সিস্টেমড ব্যবহার করে?
yglodt

উত্তর:


138

নীচেরটি স্প্রিংবুট ১.৩ এবং তার উপরে কাজ করে:

Init.d পরিষেবা হিসাবে

এক্সিকিউটেবল জারে স্বাভাবিক স্টার্ট, স্টপ, পুনঃসূচনা এবং স্থিতি কমান্ড থাকে। এটি স্বাভাবিক / var / রান ডিরেক্টরিতে একটি পিআইডি ফাইল সেটআপ করবে এবং ডিফল্টরূপে স্বাভাবিক / var / লগ ডিরেক্টরিতে লগিং করবে।

আপনাকে কেবল আপনার জারটিকে /etc/init.d তে সিমিলিংক করতে হবে

sudo link -s /var/myapp/myapp.jar /etc/init.d/myapp

অথবা

sudo ln -s ~/myproject/build/libs/myapp-1.0.jar /etc/init.d/myapp_servicename

এর পরে আপনি সাধারন কাজটি করতে পারেন

/etc/init.d/myapp start

তারপরে আপনি যে কোনও রানলেলে অ্যাপ্লিকেশনটি পছন্দ করতে চাইলে বুটটি চালু / থামিয়ে দিতে চান এমন কোনও লিঙ্ক সেটআপ করুন।


সিস্টেমড সার্ভিস হিসাবে

Var / myapp এ ইনস্টল করা একটি স্প্রিং বুট অ্যাপ্লিকেশন চালাতে আপনি নিম্নলিখিত স্ক্রিপ্টটি /etc/systemd/system/myapp.service এ যুক্ত করতে পারেন:

[Unit]
Description=myapp
After=syslog.target

[Service]
ExecStart=/var/myapp/myapp.jar

[Install]
WantedBy=multi-user.target

এনবি: আপনি যদি এই পদ্ধতিটি ব্যবহার করছেন তবে জার ফাইলটি নিজেই এক্সিকিউটেবল করতে ভুলবেন না (chmod + x দিয়ে) অন্যথায় এটি ত্রুটি "ব্যর্থ অনুমতি অস্বীকার" সহ ব্যর্থ হবে।

উল্লেখ

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/deployment-install.html#deployment-service


1
"সম্পূর্ণ নির্বাহযোগ্য জেআর" পদ্ধতির কাজ কীভাবে হয়? আমি CentOS 6.6 ব্যবহার করি। আমি আমার সাথে যোগ <executable>true</executable>করেছি pom.xml, তবে প্যাকেজযুক্ত জেআর ফাইলটি (...। ./myapp.jar ... cannot execute binary file) চালায় না
আব্দুল

5
এই উত্তরটি কেবলমাত্র বর্তমান 1.3 মাইলস্টোনটির জন্য কাজ করে যা এখনও প্রকাশিত হয়নি। 1.1 এবং 1.2 টি শাখাগুলির অন্যান্য প্রতিক্রিয়াগুলি এখানে পরীক্ষা করতে হবে।
ভোর

6
আপনি কি জানেন যে কীভাবে -Dspring.profiles.active=prodএই পরিষেবাদিতে বসন্তের যুক্তিগুলি পাস করবেন ? প্রশ্ন - stackoverflow.com/questions/31242291/...
nKognito

2
আমি বসন্ত-বুট অ্যাপ্লিকেশনটি থামাতে পারছি না। /etc/init.d stopঅ্যাপটি থামছে না, এটি আবার শুরু করার চেষ্টা করছে।
টিনটিন

2
আপনি মনিটর প্রক্রিয়া করতে চান এবং এটিকে পুনর্সূচনা যদি এটি সিস্টেমের ডেমন লেখা ছাড়া মরা যদি খুঁজে বার করো patrickgrimard.com/2014/06/06/...
ruX

112

নিম্নলিখিতটি লিনাক্সে সিস্টেম পরিষেবা হিসাবে একটি জাভা অ্যাপ্লিকেশন ইনস্টল করার সহজতম উপায়।

ধরে নেওয়া যাক আপনি ব্যবহার করছেন systemd(যা আজকাল কোনও আধুনিক ডিস্ট্রো করে):

প্রথমত, এই বিষয়বস্তু সহ /etc/systemd/systemনামযুক্ত কোনও পরিষেবা ফাইল তৈরি করুন javaservice.service:

[Unit]
Description=Java Service

[Service]
User=nobody
# The configuration file application.properties should be here:
WorkingDirectory=/data 
ExecStart=/usr/bin/java -Xmx256m -jar application.jar --server.port=8081
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

দ্বিতীয়ত, systemdনতুন পরিষেবা ফাইলটি সম্পর্কে অবহিত করুন:

systemctl daemon-reload

এবং এটি সক্ষম করুন, সুতরাং এটি বুটে চলে:

systemctl enable javaservice.service

শেষ পর্যন্ত, আপনি আপনার নতুন পরিষেবা শুরু / বন্ধ করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে পারেন:

systemctl start javaservice
systemctl stop javaservice
systemctl restart javaservice
systemctl status javaservice

আপনি যে শর্তটি ব্যাবহার করছেন systemdতা জাভা অ্যাপ্লিকেশনটিকে সিস্টেম-পরিষেবা হিসাবে সেট আপ করার জন্য এটি সবচেয়ে অনুপ্রবেশজনক এবং পরিষ্কার উপায়।

এই সমাধানটি সম্পর্কে আমি বিশেষত যা পছন্দ করি তা হ'ল আপনাকে অন্য কোনও সফ্টওয়্যার ইনস্টল এবং কনফিগার করতে হবে না। শিপড systemdআপনার জন্য সমস্ত কাজ করে এবং আপনার পরিষেবাটি অন্য কোনও সিস্টেমের পরিষেবার মতো আচরণ করে। আমি এটিকে এখন কিছু সময়ের জন্য বিভিন্ন ডিস্ট্রোতে উত্পাদন হিসাবে ব্যবহার করি এবং এটি আপনার প্রত্যাশার মতোই কাজ করে।

আর একটি প্লাস হ'ল, ব্যবহার করে /usr/bin/javaআপনি সহজেই jvmযেমন পরামিতি যুক্ত করতে পারেন -Xmx256m

এছাড়াও পড়া systemdকর্মকর্তা স্প্রিং বুট ডকুমেন্টেশনে অংশ: http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html


দুর্ভাগ্যক্রমে
সিস্টেস্ট

কীভাবে এটি বন্ধ করতে জানে? পিড রেকর্ড করে তারপর মেরে ফেলে?
কুয়াশা

2
স্প্রিং বুট 1.3+ এর সাহায্যে আপনি একটি সম্পূর্ণ সম্পাদনযোগ্য যুদ্ধ ফাইল তৈরি করতে পারেন, তাই জাভা-জজারের দরকার নেই ... বিট, কেবলমাত্র সেখানে ফাইলটির নাম ব্যবহার করুন।
পিয়েরে হেনরি

1
আমি পুরো জাভা কমান্ডলাইনটি ব্যবহার করতে পছন্দ করি কারণ আপনি jvm পরামিতি যুক্ত করতে পারেন।
yglodt

1
একটি সঠিক বুট ক্রম জন্য আপনাকে ক্রম বিবৃতি জুড়তে চাইতে পারেন [Unit]অধ্যায়, যেমন After=mysql.service, Before=apache2.service
রুস্টেক্স

57

আপনি সুপারভাইজারও ব্যবহার করতে পারেন যা খুব কার্যকরী ডেমন, যা পরিষেবাগুলি সহজেই নিয়ন্ত্রণ করতে ব্যবহার করা যেতে পারে। এই পরিষেবাগুলি সাধারণ কনফিগারেশন ফাইল দ্বারা সংজ্ঞায়িত করা হয় কোন ব্যবহারকারীকে কোন ডিরেক্টরিতে চালিত করতে হবে তা নির্ধারণ করে এবং এর মধ্যে একটি জিলিয়ন বিকল্প রয়েছে। সুপারভাইজারের একটি খুব সাধারণ বাক্য গঠন রয়েছে, সুতরাং এটি SysV init স্ক্রিপ্টগুলি লেখার জন্য খুব ভাল বিকল্প তৈরি করে।

আপনি যে প্রোগ্রামটি চালনা / নিয়ন্ত্রণের চেষ্টা করছেন সেই প্রোগ্রামের জন্য এখানে একটি সাধারণ সুপারভাইজার কনফিগারেশন ফাইল (এটিকে /etc/supervisor/conf.d/yourapp.conf এ রাখুন )

/etc/supervisor/conf.d/yourapp.conf

[program:yourapp]
command=/usr/bin/java -jar /path/to/application.jar
user=usertorun
autostart=true
autorestart=true
startsecs=10
startretries=3
stdout_logfile=/var/log/yourapp-stdout.log
stderr_logfile=/var/log/yourapp-stderr.log

অ্যাপ্লিকেশনটি নিয়ন্ত্রণ করতে আপনাকে সুপারভাইসেক্টল এক্সিকিউট করতে হবে , যা আপনাকে এমন প্রম্পট দিয়ে হাজির করবে যেখানে আপনি শুরু করতে পারেন, থামাতে পারবেন, স্থিতি ইউর্যাপ করতে পারেন।

CLI

# sudo supervisorctl
yourapp             RUNNING   pid 123123, uptime 1 day, 15:00:00
supervisor> stop yourapp
supervisor> start yourapp

যদি supervisordডেমনটি ইতিমধ্যে চলমান থাকে এবং আপনি ডিমনটি পুনরায় আরম্ভ না করেই আপনার সার্ভের জন্য কনফিগারেশন যুক্ত করেছেন তবে আপনি কেবল শেলটিতে একটি rereadএবং updateকমান্ড করতে পারেন supervisorctl

এটি সত্যই আপনাকে সিসিভি ইনস স্ক্রিপ্টগুলি ব্যবহার করে এমন সমস্ত ফ্লেক্সিবিলাইট দেয় তবে ব্যবহার ও নিয়ন্ত্রণে সহজ। ডকুমেন্টেশন একবার দেখুন ।


অবশেষে বাক্সের বাইরে আমার জন্য কিছু কাজ করেছিল। সুপারভাইজার ইঙ্গিতের জন্য অনেক ধন্যবাদ।
ভাইটালি সাজনোভিচ

এটি একই কাজ করে systemdযা বেশিরভাগ বর্তমান লিনাক্স ডিস্ট্রোজে অন্তর্নির্মিত।
rustyx

18

আমি নিজেই এটি করতে পেরেছি, সুতরাং CentOS init.d পরিষেবা নিয়ামক স্ক্রিপ্টের দিক থেকে আমি এখন পর্যন্ত যেখানে রয়েছি। এটি এখন পর্যন্ত বেশ সুন্দরভাবে কাজ করছে, তবে আমি কোনও লিট ব্যাশ হ্যাকার নই, সুতরাং আমি নিশ্চিত যে উন্নতির কোনও জায়গা আছে, তাই এটির উন্নতি করার চিন্তাভাবনা স্বাগত।

প্রথমত, আমার কাছে /data/svcmgmt/conf/my-spring-boot-api.shপ্রতিটি পরিষেবার জন্য একটি স্বল্প কনফিগার স্ক্রিপ্ট রয়েছে, যা পরিবেশের ভেরিয়েবলগুলি সেট আপ করে।

#!/bin/bash
export JAVA_HOME=/opt/jdk1.8.0_05/jre
export APP_HOME=/data/apps/my-spring-boot-api
export APP_NAME=my-spring-boot-api
export APP_PORT=40001

আমি CentOS ব্যবহার করছি, যাতে সার্ভার পুনরায় চালু হওয়ার পরে আমার পরিষেবা শুরু হয় তা নিশ্চিত করতে, আমার একটি পরিষেবা নিয়ন্ত্রণ স্ক্রিপ্ট রয়েছে /etc/init.d/my-spring-boot-api:

#!/bin/bash
# description: my-spring-boot-api start stop restart
# processname: my-spring-boot-api
# chkconfig: 234 20 80

. /data/svcmgmt/conf/my-spring-boot-api.sh

/data/svcmgmt/bin/spring-boot-service.sh $1

exit 0

আপনি দেখতে পাচ্ছেন, এটি পরিবেশের ভেরিয়েবলগুলি সেট আপ করতে প্রাথমিক কনফিগার স্ক্রিপ্টকে কল করে এবং তারপরে একটি ভাগ করা স্ক্রিপ্ট কল করে যা আমি আমার সমস্ত স্প্রিং বুট পরিষেবাদি পুনরায় চালু করার জন্য ব্যবহার করি। সেই ভাগ করা স্ক্রিপ্টটিই যেখানে এর সমস্ত মাংস পাওয়া যায়:

#!/bin/bash

echo "Service [$APP_NAME] - [$1]"

echo "    JAVA_HOME=$JAVA_HOME"
echo "    APP_HOME=$APP_HOME"
echo "    APP_NAME=$APP_NAME"
echo "    APP_PORT=$APP_PORT"

function start {
    if pkill -0 -f $APP_NAME.jar > /dev/null 2>&1
    then
        echo "Service [$APP_NAME] is already running. Ignoring startup request."
        exit 1
    fi
    echo "Starting application..."
    nohup $JAVA_HOME/bin/java -jar $APP_HOME/$APP_NAME.jar \
        --spring.config.location=file:$APP_HOME/config/   \
        < /dev/null > $APP_HOME/logs/app.log 2>&1 &
}

function stop {
    if ! pkill -0 -f $APP_NAME.jar > /dev/null 2>&1
    then
        echo "Service [$APP_NAME] is not running. Ignoring shutdown request."
        exit 1
    fi

    # First, we will try to trigger a controlled shutdown using 
    # spring-boot-actuator
    curl -X POST http://localhost:$APP_PORT/shutdown < /dev/null > /dev/null 2>&1

    # Wait until the server process has shut down
    attempts=0
    while pkill -0 -f $APP_NAME.jar > /dev/null 2>&1
    do
        attempts=$[$attempts + 1]
        if [ $attempts -gt 5 ]
        then
            # We have waited too long. Kill it.
            pkill -f $APP_NAME.jar > /dev/null 2>&1
        fi
        sleep 1s
    done
}

case $1 in
start)
    start
;;
stop)
    stop
;;
restart)
    stop
    start
;;
esac
exit 0

থামার সময়, এটি একটি নিয়ন্ত্রিত শাটডাউন সম্পাদন করার জন্য স্প্রিং বুট অ্যাকুয়েটর ব্যবহার করার চেষ্টা করবে। তবে, যদি অ্যাকুয়েটর কনফিগার না হয়ে থাকে বা যুক্তিসঙ্গত সময়সীমার মধ্যে বন্ধ করতে ব্যর্থ হয় (আমি এটি 5 সেকেন্ড দেব, যা সত্যিই কিছুটা ছোট) তবে প্রক্রিয়াটি মারা যাবে।

এছাড়াও, স্ক্রিপ্টটি ধরে নিয়েছে যে অ্যাপ্লিকেশনটি চালানো জাভা প্রক্রিয়াটি কেবলমাত্র প্রক্রিয়া বিশদটির পাঠ্যে "মাই-স্প্রিং-বুট-এপি.জার" দিয়ে থাকবে। এটি আমার পরিবেশের একটি নিরাপদ অনুমান এবং এর অর্থ হল পিআইডিগুলির ট্র্যাক রাখার দরকার নেই।


3
আপনার নিজস্ব স্টার্ট / স্টপ স্ক্রিপ্ট লেখার দরকার নেই। এটি স্প্রিং বুট 1.3 এবং তার উপরে সরবরাহ করা হয়েছে। আরও বিশদ জানতে ডকস.স্প্রিং.আইও / স্প্রিং- বুট / ডকস / ক্রিয়েন্ট / রেফারেন্স / htmlsingle/… দেখুন ।
গ্রেগটার্ন

এটি একটি বিকল্প হিসাবে জেনে রাখা ভাল, তবে এটি যা ব্যবহার করে তা কার্যকর করার প্রয়োজনীয়তা সরিয়ে দেয় java -jar। স্ক্রিপ্টের বাকি অংশগুলি এখনও প্রয়োজন।
স্টিভ

যখন /etc/init.d বা systemd কোনও বিকল্প না হয় তার জন্য খুব দরকারী, ভাগ করে নেওয়ার জন্য ধন্যবাদ।
বার্নার্ডন

@ স্টিভ: না আপনি চাকা পুনরুদ্ধার করছেন। ওহ, এবং আমরা এখন সিস্টেম করেছি।
মার্টিন শ্রাইডার

যখন আপনাকে JVM- তে প্যারামিটারগুলি পাস করার দরকার হবে (যেমন-জাভাজনেন্ট বা -D পরামিতি) এটি অনন্য উপায়, @ স্টিভকে tks!
ডায়র্জিও

14

আপনি যদি স্প্রিং বুট মাভেন প্লাগইন 1.3.0.M2 সহ স্প্রিং বুট 1.2.5 ব্যবহার করতে চান তবে সমাধানটি এখানে দেখুন:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.5.RELEASE</version>
</parent>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.M2</version>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

<pluginRepositories>
    <pluginRepository>
        <id>spring-libs-milestones</id>
        <url>http://repo.spring.io/libs-milestone</url>
    </pluginRepository> 
</pluginRepositories>

তারপর ususal যেমন কম্পাইল: mvn clean packageএকটি সিমবলিক লিঙ্ক করা ln -s /.../myapp.jar /etc/init.d/myapp, এটা এক্সিকিউটেবল করতে chmod +x /etc/init.d/myappএবং এটি শুরু service myapp start(উবুন্টু সার্ভার সহ)


রান রানযোগ্য ওয়ার ফাইলগুলি সম্পর্কে কী? এটি ওয়ার লেআউট নিয়ে আমার পক্ষে কাজ করে না।
রাদু টডার

মজার বিষয় হল এটি মুক্তির সাথে কাজ করে 1.3.0.M2, তবে আমি চেষ্টা করার পরে একটি ত্রুটি পেয়েছি 1.3.0.RC1
জেবিসিপি

মাভেনের পরিবর্তে গ্রেডেল দিয়ে এটি কীভাবে করবেন সে সম্পর্কে কোনও ধারণা?
গির

গ্রেডল ব্যবহার করার সময়, springBoot { executable = true }ব্লক ব্যবহার করে এই কনফিগারেশনটি সম্পন্ন ।
ন্যাটিক্স

@ রডুডোডার: আপনি কি ওয়ার্ল্ড ফাইলকে পরিষেবা হিসাবে কার্যকর করতে পেরেছিলেন?
নবীনকুমার্ব্বভ

9

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি আরেকটি উপায়ে উপস্থাপন করতে চেয়েছিলাম যা অ্যাপসেম্বার-ম্যাভেন-প্লাগইন । আমার পম থেকে প্রাসঙ্গিক অংশটি এখানে দরকারী হিসাবে পাওয়া যায় এমন অনেক অতিরিক্ত বিকল্প মান অন্তর্ভুক্ত করে:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <configuration>
        <generateRepository>true</generateRepository>
        <repositoryLayout>flat</repositoryLayout>
        <useWildcardClassPath>true</useWildcardClassPath>
        <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
        <configurationDirectory>config</configurationDirectory>
        <target>${project.build.directory}</target>
        <daemons>
            <daemon>
                <id>${installer-target}</id>
                <mainClass>${mainClass}</mainClass>
                <commandLineArguments>
                    <commandLineArgument>--spring.profiles.active=dev</commandLineArgument>
                    <commandLineArgument>--logging.config=${rpmInstallLocation}/config/${installer-target}-logback.xml</commandLineArgument>
                </commandLineArguments>
                <platforms>
                    <platform>jsw</platform>
                </platforms>
                <generatorConfigurations>
                    <generatorConfiguration>
                        <generator>jsw</generator>
                        <includes>
                            <include>linux-x86-64</include>
                        </includes>
                        <configuration>
                            <property>
                                <name>wrapper.logfile</name>
                                <value>logs/${installer-target}-wrapper.log</value>
                            </property>
                            <property>
                                <name>wrapper.logfile.maxsize</name>
                                <value>5m</value>
                            </property>
                            <property>
                                <name>run.as.user.envvar</name>
                                <value>${serviceUser}</value>
                            </property>
                            <property>
                                <name>wrapper.on_exit.default</name>
                                <value>RESTART</value>
                            </property>
                        </configuration>
                    </generatorConfiguration>
                </generatorConfigurations>
                <jvmSettings>
                    <initialMemorySize>256M</initialMemorySize>
                    <maxMemorySize>1024M</maxMemorySize>
                    <extraArguments>
                        <extraArgument>-server</extraArgument>
                    </extraArguments>
                </jvmSettings>
            </daemon>
        </daemons>
    </configuration>
    <executions>
        <execution>
            <id>generate-jsw-scripts</id>
            <phase>package</phase>
            <goals>
                <goal>generate-daemons</goal>
            </goals>
        </execution>
    </executions>
</plugin>

6

উইন্ডো সার্ভিস হিসাবে

আপনি যদি উইন্ডোজ মেশিনে এটি চালাতে চান তবে winsw.exe ডাউনলোড করুন

 http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/2.1.2/

এর পরে এটি জার ফাইলনামে নাম পরিবর্তন করুন (যেমন: আপনার অ্যাপ্লিকেশন। জার )

winsw.exe -> your-app.exe

এখন আপনার- app.xml একটি এক্সএমএল ফাইল তৈরি করুন এবং নিম্নলিখিত লিখিত সামগ্রীটি এতে অনুলিপি করুন

<?xml version="1.0" encoding="UTF-8"?>
<service>
     <id>your-app</id>
     <name>your-app</name>
     <description>your-app as a Windows Service</description>
     <executable>java</executable>
     <arguments>-jar "your-app.jar"</arguments>
     <logmode>rotate</logmode>
</service>

নিশ্চিত করুন যে একই ফোল্ডারে জার সহ এক্সেল এবং এক্সএমএল

এই ওপেন কমান্ড প্রম্পটের পরে প্রশাসককে প্ররোচিত করুন এবং এটি উইন্ডোজ পরিষেবাতে ইনস্টল করুন।

your-app.exe install
eg -> D:\Springboot\your-app.exe install

যদি এটির সাথে ব্যর্থ হয়

Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' has value '1.8', but '1.7' is required.

তারপরে নিম্নলিখিত চেষ্টা করুন:

Delete java.exe, javaw.exe and javaws.exe from C:\Windows\System32

এটাই :) .

উইন্ডোতে পরিষেবাটি আনইনস্টল করতে

your-app.exe uninstall

পরিষেবাটি দেখতে / চালানো / থামানোর জন্য: win + r টাইপ করুন এবং প্রশাসনিক সরঞ্জামগুলি টাইপ করুন তারপরে পরিষেবাটি নির্বাচন করুন । তারপর ডান ক্লিক পছন্দ করে রান / স্টপ - বিকল্প


আমি সংস্থার ইন্ট্রানেট এনভির উইন্ডোজ পরিষেবা হিসাবে স্প্রিং বুট জার চালানোর জন্য একই পদক্ষেপগুলি অনুসরণ করেছি, তবে পরিষেবাটি উঠছে না। ত্রুটি সহ একটি উইন্ডো আসছে: ত্রুটি: 1067 প্রক্রিয়াটি অপ্রত্যাশিতভাবে শেষ হয়েছে আপনি দয়া করে সাহায্য বা পরামর্শ দেওয়ার দরকার কি করতে হবে?
নিখিল সিং ভাদোরিয়া

আপনার কি এটি করার সমস্ত অনুমতি আছে? আপনি যদি প্রশাসক হন তবে এটি কোনও সমস্যার কারণ হবে না। আপনি কি প্রশাসক অধিকার আছে তা পরীক্ষা করতে পারেন।
অরুণদেব

stackoverflow.com/questions/18205111/… আপনি দয়া করে এটি চেষ্টা করতে পারেন এটি আপনাকে সমস্যার সমাধান করতে সহায়তা করবে।
অরুণদেব

দ্রুত প্রতিক্রিয়াটির জন্য ধন্যবাদ, আমি এক্সএমএল ফাইলের ট্যাগ সহ কোনও সমস্যা সংশোধন করে আমার পরিষেবাটি চালু এবং চলমান করেছি।
নিখিল সিং ভাদোরিয়া

4

সেন্টোস 6 / আরএইচইএল (এখনও আদর্শ নয়) এর জন্য আমার সিসভিউনিট স্ক্রিপ্ট। এই স্ক্রিপ্টটির জন্য অ্যাপ্লিকেশনপিডলিস্টার প্রয়োজন ।

উৎস /etc/init.d/app

#!/bin/sh
#
# app Spring Boot Application 
#
# chkconfig:   345 20 80
# description: App Service
#           

### BEGIN INIT INFO
# Provides: App
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 3 4 5 
# Default-Stop: 0 1 2 6
# Short-Description: Application
# Description:      
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

exec="/usr/bin/java"
prog="app"
app_home=/home/$prog/
user=$prog

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog    
pid=$app_home/$prog.pid

start() {

    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 1
    echo -n $"Starting $prog: "
    cd $app_home
    daemon --check $prog --pidfile $pid --user $user $exec $app_args &
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pid $prog
    retval=$?
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    status -p $pid $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?

নমুনা কনফিগারেশন ফাইল /etc/sysconfig/app:

exec=/opt/jdk1.8.0_05/jre/bin/java

user=myuser
app_home=/home/mysuer/

app_args="-jar app.jar"

pid=$app_home/app.pid

4

এখানে একটি স্ক্রিপ্ট রয়েছে যা একটি এক্সিকিউটেবল জারকে সিস্টেমড পরিষেবা হিসাবে স্থাপন করে।

এটি পরিষেবা এবং। সার্ভিস ফাইলের জন্য একটি ব্যবহারকারী তৈরি করে এবং জার ফাইলটিকে / var এর অধীনে রাখে এবং সুযোগ-সুবিধার জন্য কিছু বেসিক লক ডাউন করে।

#!/bin/bash

# Argument: The jar file to deploy
APPSRCPATH=$1

# Argument: application name, no spaces please, used as folder name under /var
APPNAME=$2

# Argument: the user to use when running the application, may exist, created if not exists
APPUSER=$3

# Help text
USAGE="
Usage: sudo $0 <jar-file> <app-name> <runtime-user>
If an app with the name <app-name> already exist, it is stopped and deleted.
If the <runtime-user> does not already exist, it is created.
"

# Check that we are root
if [ ! "root" = "$(whoami)" ]; then
    echo "Must be root. Please use e.g. sudo"
    echo "$USAGE"
    exit
fi

# Check arguments
if [ "$#" -ne 3 -o ${#APPSRCPATH} = 0 -o ${#APPNAME} = 0 -o ${#APPUSER} = 0 ]; then
    echo "Incorrect number of parameters."
    echo "$USAGE"
    exit
fi

if [ ! -f $APPSRCPATH ]; then
    echo "Can't find jar file $APPSRCPATH"
    echo "$USAGE"
    exit
fi

# Infered values
APPFILENAME=$(basename $APPSRCPATH)
APPFOLDER=/var/javaapps/$APPNAME
APPDESTPATH=$APPFOLDER/$APPFILENAME

# Stop the service if it already exist and is running
systemctl stop $APPNAME >/dev/null 2>&1

# Create the app folder, deleting any previous content
rm -fr $APPFOLDER
mkdir -p $APPFOLDER

# Create the user if it does not exist
if id "$APPUSER" >/dev/null 2>&1; then
    echo "Using existing user $APPUSER"
else
    adduser --disabled-password --gecos "" $APPUSER
    echo "Created user $APPUSER"
fi

# Place app in app folder, setting owner and rights
cp $APPSRCPATH $APPDESTPATH
chown $APPUSER $APPDESTPATH
chmod 500 $APPDESTPATH
echo "Added or updated the $APPDESTPATH file"

# Create the .service file used by systemd
echo "
[Unit]
Description=$APPNAME
After=syslog.target
[Service]
User=$APPUSER
ExecStart=/usr/bin/java -jar $APPDESTPATH
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/$APPNAME.service
echo "Created the /etc/systemd/system/$APPNAME.service file"

# Reload the daemon
systemctl daemon-reload

# Start the deployed app
systemctl start $APPNAME
systemctl status $APPNAME

উদাহরণ: এখানে চিত্র বর্ণনা লিখুন


4

আমি স্প্রিংবুট অ্যাপ্লিকেশনগুলি তৈরি করার চেষ্টা করছি যা "সংক্ষেপে জাভা অ্যাপ্লিকেশন সহ একটি" init.d "শৈলীর শেল স্ক্রিপ্ট হিসাবে উপস্থাপিত হবে

এই স্ক্রিপ্টগুলিকে /etc/init.d/spring-app থেকে /opt/spring-app.jar- তে sylink করে এবং জারকে chmod'ing করে এক্সিকিউটেবল হতে পারে "/etc/init.d/spring-app শুরু করা সম্ভব "" /etc/init.d/spring-app স্টপ "এবং স্ট্যাটাস কাজের মতো অন্যান্য সম্ভাবনা

সম্ভবত, স্প্রিংবুট থেকে সূচিত্রে স্টাইলের স্ক্রিপ্টগুলি দেখতে যে তাদের কাছে প্রয়োজনীয় জাদুযুক্ত স্ট্রিং রয়েছে (যেমন # Default-Start: 2 3 4 5) চককনফিগ এটি "পরিষেবা" হিসাবে যুক্ত করতে সক্ষম হবে

তবে আমি এটি সিস্টেমডের সাথে কাজ করার জন্য পেতে চাই

এই কাজটি করার জন্য আমি উপরের অন্যান্য উত্তরগুলিতে অনেকগুলি রসিপির চেষ্টা করেছি তবে সেগুলির কেউই আমার জন্য সেন্ট্রোস 7.2 এ স্প্রিংবুট 1.3 দিয়ে কাজ করেননি বেশিরভাগ তারা সার্ভিসটি শুরু করবে তবে পিডটি ট্র্যাক করতে সক্ষম হবে না

শেষ পর্যন্ত আমি নিম্নলিখিতটি আমার জন্য কাজ করেছিলাম, যখন /etc/init.d লিঙ্কটিও ছিল। নীচের মত একটি ফাইল হিসাবে ইনস্টল করা উচিত/usr/lib/systemd/system/spring-app.service

[Unit]
Description=My loverly application
After=syslog.target 

[Service]
Type=forking
PIDFile=/var/run/spring-app/spring-app.pid
ExecStart=/etc/init.d/spring-app start
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

4

আমি ওয়ার / জেআর লেআউটের জন্য সিস্টেমেড পরিষেবা শেষ করেছি

আমি জাভা-জার বলছি কারণ এটি আরও নমনীয়। এক্সেকস্টার্ট = বসন্ত-এমভিসি.ওয়ার স্থাপনের চেষ্টাও করা হলেও কার্যকর কার্যকর হলেও আমি 'এক্সিকিউট ফর্ম্যাট ত্রুটি' পেয়েছি

যাইহোক, আজকাল, সিস্টেস্ট সমস্ত ডিস্ট্রোজে উপস্থিত থাকে এবং লগগুলি পুনর্নির্দেশের জন্য একটি দুর্দান্ত সমাধান সরবরাহ করে (যখন আপনি পরিষেবাটি লগ 4 জ ফাইল শুরু না করেন সেন্সারটি গুরুত্বপূর্ণ তখনও ফাঁকা থাকবে :))।

cat /etc/systemd/system/spring-mvc.service 
[Unit]
Description=Spring MVC Java Service

[Service]
User=spring-mvc
# The configuration file application.properties should be here:
WorkingDirectory=/usr/local/spring-mvc


# Run ExecStartPre with root-permissions
PermissionsStartOnly=true

ExecStartPre=-/bin/mkdir -p /var/log/spring-mvc


ExecStartPre=/bin/chown -R spring-mvc:syslog /var/log/spring-mvc
ExecStartPre=/bin/chmod -R 775 /var/log/spring-mvc



#https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=
ExecStart=/usr/bin/java \
        -Dlog4j.configurationFile=log4j2-spring.xml \
        -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector \
        -Dspring.profiles.active=dev \
        -Denvironment-type=dev \
        -XX:+UseConcMarkSweepGC \
        -XX:CMSInitiatingOccupancyFraction=80 \
        -XX:NewSize=756m \
        -XX:MetaspaceSize=256m \
        -Dsun.net.inetaddr.ttl=5 \
        -Xloggc:/var/log/spring-mvc/gc.log \
        -verbose:gc \
        -verbosegc \
        -XX:+DisableExplicitGC \
        -XX:+PrintGCDetails \
        -XX:+PrintGCDateStamps \
        -XX:+PreserveFramePointer \
        -XX:+StartAttachListener \
        -Xms1024m \
        -Xmx1024m \
        -XX:+HeapDumpOnOutOfMemoryError \
        -jar spring-mvc.war

SuccessExitStatus=143
StandardOutput=journal
StandardError=journal


KillSignal=SIGINT
TimeoutStopSec=20
Restart=always
RestartSec=5
StartLimitInterval=0
StartLimitBurst=10

LimitNOFILE=500000
LimitNPROC=500000

#https://www.freedesktop.org/software/systemd/man/systemd.exec.html#LimitCPU=
#LimitCPU=, LimitFSIZE=, LimitDATA=, LimitSTACK=, LimitCORE=, LimitRSS=, LimitNOFILE=, LimitAS=, LimitNPROC=, LimitMEMLOCK=, LimitLOCKS=, LimitSIGPENDING=, LimitMSGQUEUE=, LimitNICE=, LimitRTPRIO=, LimitRTTIME=¶

SyslogIdentifier=spring-mvc

[Install]
WantedBy=multi-user.target


# https://www.freedesktop.org/software/systemd/man/journalctl.html
#check logs --- journalctl -u spring-mvc -f -o cat

rsyslog - অ্যাপ্লিকেশন থেকে নির্দিষ্ট ফোল্ডার / ফাইলে সিসলগ ইনপুট পুনর্নির্দেশ করুন

cat /etc/rsyslog.d/30-spring-mvc.conf 
if $programname == 'spring-mvc' then /var/log/spring-mvc/spring-mvc.log
& stop

logrotate

cat /etc/logrotate.d/spring-mvc.conf 
/var/log/spring-mvc/spring-mvc.log
{
    daily
    rotate 30
    maxage 30
    copytruncate
    missingok
    notifempty
    compress
    dateext
    dateformat _%Y-%m-%d_%H-%M
    delaycompress
    create 644 spring-mvc syslog
    su spring-mvc syslog
}

লোগ্রোটেট জিসি

cat /etc/logrotate.d/spring-mvc-gc.conf 
/var/log/spring-mvc/gc.log
{
    daily
    rotate 30
    maxage 30
    copytruncate
    missingok
    notifempty
    compress
    dateext
    dateformat _%Y-%m-%d_%H-%M
    delaycompress
    create 644 spring-mvc syslog
    su spring-mvc syslog
}

3

এই প্রশ্নে @PbxMan এর উত্তর আপনাকে শুরু করা উচিত:

লিনাক্সের পরিষেবা হিসাবে একটি জাভা অ্যাপ্লিকেশন চালান

সম্পাদনা:

ক্রোন ব্যবহার করে পুনরায় বুট করার প্রক্রিয়া শুরু করার আর একটি কম সুন্দর উপায় রয়েছে:

@reboot user-to-run-under /usr/bin/java -jar /path/to/application.jar

এটি কাজ করে তবে আপনার অ্যাপ্লিকেশনটির জন্য আপনাকে কোনও দুর্দান্ত শুরু / স্টপ ইন্টারফেস দেয় না। আপনি এখনও killএটি যেকোনভাবে সহজভাবে করতে পারেন ...


আসলেই নয়, কারণ স্প্রিং বুট এটি করার জন্য বিশেষ বৈশিষ্ট্যগুলি সরবরাহ করে।
ত্রিস্তান

2

জাভা অ্যাপের সাহায্যে এটি করার একটি "স্ট্যান্ডার্ড" সঙ্কুচিত-মোড়ানো উপায় সম্পর্কে আমি জানি না, তবে এটি অবশ্যই একটি ভাল ধারণা (যদি তারা সেখানে থাকে তবে অপারেটিং সিস্টেমের বজায় রাখা এবং তদারকি করার ক্ষমতা থেকে আপনি উপকার পেতে চান) । স্প্রিং বুট সরঞ্জাম সমর্থন (মাভেন এবং গ্রেডেল) থেকে কিছু সরবরাহ করার জন্য এটি রোডম্যাপে রয়েছে তবে আপাতত আপনাকে সম্ভবত নিজের নিজস্ব রোল করতে হবে। আমি এখন অবধি সবচেয়ে ভাল সমাধানটি জানি ফোরম্যান , যার বিভিন্ন বিবরণী ওএস ফর্ম্যাটের (মনিট, সিএস ভি, আপস্টার্ট ইত্যাদি) প্যাকেজিং ইন স্ক্রিপ্টগুলির জন্য একটি ঘোষণামূলক পদ্ধতির এবং একটি লাইন কমান্ড রয়েছে। গ্রেড (যেমন এখানে ) দিয়ে লোকেরা জিনিসপত্র সেট আপ করার প্রমাণও রয়েছে ।


2

আপনি কি মাভেন ব্যবহার করছেন? তারপরে আপনার AppAssembler Plugin ব্যবহার করা উচিত:

অ্যাপ্লিকেশন অ্যাসেমব্লার প্লাগইন জাভা অ্যাপ্লিকেশন শুরু করার জন্য স্ক্রিপ্ট তৈরির জন্য একটি মাভেন প্লাগইন। ... উত্পাদিত বিন স্ক্রিপ্টগুলিতে সমস্ত শিল্পকলা (নির্ভরতা + প্রকল্প থেকে শিল্পকর্ম) শ্রেণিপথে যুক্ত করা হয়।

সমর্থিত প্ল্যাটফর্মগুলি:

ইউনিক্স-রূপগুলো

উইন্ডোজ এনটি (উইন্ডোজ 9 এক্স সমর্থিত নয়)

জাভা সার্ভিস র‍্যাপার (জেএসডাব্লু)

দেখুন: http://mojo.codehaus.org/appassembler/appassembler-maven-plugin/index.html


2

নীচের কনফিগারেশনটি স্প্রিং বুট প্রকল্পগুলিতে build.gradle ফাইলে প্রয়োজনীয়।

build.gradle

jar {
    baseName = 'your-app'
    version = version
}

springBoot {
    buildInfo()
    executable = true   
    mainClass = "com.shunya.App"
}

নির্বাহযোগ্য = সত্য

এটি ইউনিক্স সিস্টেমে সম্পূর্ণ নির্বাহযোগ্য জার তৈরি করা প্রয়োজন (সেন্টোস এবং উবুন্টু)

একটি .conf ফাইল তৈরি করুন

আপনি যদি কাস্টম জেভিএম বৈশিষ্ট্য বা স্প্রিং বুট অ্যাপ্লিকেশন চালানোর আর্গুমেন্ট কনফিগার করতে চান তবে আপনি স্প্রিং বুট অ্যাপ্লিকেশন নামের মতো একটি নাম দিয়ে একটি .conf ফাইল তৈরি করতে পারেন এবং এটি জার ফাইলের সাথে সমান্তরালে রাখতে পারেন।

আপনার-অ্যাপ.জারটি আপনার স্প্রিং বুট অ্যাপ্লিকেশনটির নাম তা বিবেচনা করে আপনি নিম্নলিখিত ফাইলটি তৈরি করতে পারেন।

JAVA_OPTS="-Xms64m -Xmx64m"
RUN_ARGS=--spring.profiles.active=prod
LOG_FOLDER=/custom/log/folder

এই কনফিগারেশনটি স্প্রিং বুট অ্যাপ্লিকেশনটির জন্য 64 এমবি র‌্যাম সেট করবে এবং প্রোড প্রোফাইল সক্রিয় করবে।

লিনাক্সে একটি নতুন ব্যবহারকারী তৈরি করুন

বর্ধিত সুরক্ষার জন্য আমাদের একটি পরিষেবা হিসাবে স্প্রিং বুট অ্যাপ্লিকেশন চালাতে একটি নির্দিষ্ট ব্যবহারকারী তৈরি করতে হবে।

একটি নতুন ব্যবহারকারী তৈরি করুন

sudo useradd -s /sbin/nologin springboot

উবুন্টু / ডেবিয়ানে উপরোক্ত কমান্ডটি নিম্নলিখিত হিসাবে পরিবর্তন করুন:

sudo useradd -s /usr/sbin/nologin springboot

পাসওয়ার্ড সেট করুন

sudo passwd springboot

এক্সিকিউটেবল ফাইলটির স্প্রিংবুট মালিক করুন

chown springboot:springboot your-app.jar

জার ফাইলের পরিবর্তন রোধ করুন

chmod 500 your-app.jar

এটি জারের অনুমতিগুলি কনফিগার করবে যাতে এটি লেখা যায় না এবং কেবল তার মালিকের স্প্রিংবুট দ্বারা পড়া বা সম্পাদন করা যায়।

আপনি পরিবর্তন অ্যাট্রিবিউট (চ্যাটার) কমান্ডটি ব্যবহার করে আপনার জার ফাইলটিকে অপরিবর্তনীয় হিসাবে বিকল্প হিসাবে তৈরি করতে পারেন।

sudo chattr +i your-app.jar

সংশ্লিষ্ট .conf ফাইলের জন্যও উপযুক্ত অনুমতি সেট করা উচিত। .conf- এর জন্য রিড + এক্সিকিউটিভ (অক্টাল 500) অ্যাক্সেসের পরিবর্তে কেবল পঠন অ্যাক্সেস (অক্টাল 400) প্রয়োজন

chmod 400 your-app.conf

সিস্টেমড সার্ভিস তৈরি করুন

/etc/systemd/system/your-app.service

[Unit]
Description=Your app description
After=syslog.target

[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

ওএস দ্বারা হত্যা হয়ে গেলে প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পুনরায় চালু করুন

ব্যর্থতার পরে প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পুনঃসূচনা করতে নীচের দুটি বৈশিষ্ট্য (পুনঃসূচনা এবং পুনরায় সূচনা) যুক্ত করুন।

/etc/systemd/system/your-app.service

[Service]
User=springboot
ExecStart=/var/myapp/your-app.jar
SuccessExitStatus=143
Restart=always
RestartSec=30

পরিবর্তনটি 30 সেকেন্ডের বিলম্বের সাথে ব্যর্থতার ক্ষেত্রে স্প্রিং বুট অ্যাপ্লিকেশনটিকে পুনরায় চালু করবে। যদি আপনি systemctl কমান্ড ব্যবহার করে পরিষেবাটি বন্ধ করেন তবে পুনরায় আরম্ভ হবে না।

সিস্টেম স্টার্টআপে সময়সূচী পরিষেবা

সিস্টেম বুটে স্বয়ংক্রিয়ভাবে শুরু করতে অ্যাপ্লিকেশনটিকে ফ্ল্যাগ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

সিস্টেমের শুরুতে স্প্রিং বুট অ্যাপ্লিকেশন সক্ষম করুন

sudo systemctl enable your-app.service

পরিষেবা বন্ধ করুন

প্রক্রিয়াটি শুরু করতে এবং থামাতে সিস্টেমেটেক্ট উবুন্টু 16.04 এলটিএস এবং 18.04 এলটিএসে ব্যবহার করা যেতে পারে।

প্রক্রিয়া শুরু করুন

sudo systemctl start your-app

প্রক্রিয়া বন্ধ করুন

sudo systemctl stop your-app

তথ্যসূত্র

https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html


1

চাদের দুর্দান্ত উত্তরের অনুসরণ করে, যদি আপনি "ত্রুটি: মূল শ্রেণীর সন্ধান বা লোড করতে না পেরে " একটি ত্রুটি পেয়ে থাকেন - এবং এটির সমস্যা সমাধানের জন্য আপনি কয়েক ঘন্টা ব্যয় করেছেন, আপনার জাভা অ্যাপ্লিকেশন শুরু হওয়া শেল স্ক্রিপ্ট কার্যকর করা বা এটি শুরু করা হোক না কেন সিস্টেমেড থেকে নিজেই - এবং আপনি জানেন যে আপনার ক্লাসপথটি 100% সঠিক, যেমন শেল স্ক্রিপ্টটি ম্যানুয়ালি চালানো পাশাপাশি সিস্টেমে নির্বাহকটিতে যা আছে তা চালানোও। আপনি সঠিক ব্যবহারকারী হিসাবে জিনিস চালাচ্ছেন তা নিশ্চিত হন! আমার ক্ষেত্রে, আমি বিভিন্ন ব্যবহারকারীদের চেষ্টা করেছিলাম, সমস্যার সমাধানের বেশ কিছুক্ষণ পরে - আমার অবশেষে একটি কুঁচকী ছিল, ব্যবহারকারী হিসাবে রুট রেখেছিল - ভয়েলা, অ্যাপ্লিকেশনটি সঠিকভাবে শুরু হয়েছিল। এটি একটি ভুল ব্যবহারকারীর সমস্যা ছিল তা নির্ধারণের পরে, আমিchown -R user:user ফোল্ডার এবং সাবফোল্ডার এবং অ্যাপ্লিকেশনটি নির্দিষ্ট ব্যবহারকারী এবং গোষ্ঠী হিসাবে সঠিকভাবে চলেছিল তাই এটিকে আর রুট হিসাবে চালানোর প্রয়োজন নেই (খারাপ সুরক্ষা)।


1

সিস্টেমড ইউনিট ফাইলগুলিতে আপনি এনভায়রনমেন্ট ভেরিয়েবল ডিরেক্টরি বা একটি মাধ্যমে সেট করতে পারেন EnvironmentFile। আমি জিনিসগুলি এভাবে করার প্রস্তাব রাখি কারণ এটি মনে হয় ঘর্ষণটির সর্বনিম্ন পরিমাণ।

নমুনা ইউনিট ফাইল

$ cat /etc/systemd/system/hello-world.service
[Unit]
Description=Hello World Service
After=systend-user-sessions.service

[Service]
EnvironmentFile=/etc/sysconfig/hello-world
Type=simple
ExecStart=/usr/bin/java ... hello-world.jar

তারপরে একটি ফাইল সেটআপ করুন /etc/sysconfig/hello-worldযার অধীনে আপনার স্প্রিং বুট ভেরিয়েবলের বড় হাতের নাম অন্তর্ভুক্ত। উদাহরণস্বরূপ, একটি পরিবর্তনশীল নামক পরিবেশ ভেরিয়েবল হিসাবে server.portফর্ম অনুসরণ করবে SERVER_PORT:

$ cat /etc/sysconfig/hello-world
SERVER_PORT=8081

এখানে যে পদ্ধতিটি ব্যবহার করা হচ্ছে তা হ'ল স্প্রিং বুট অ্যাপ্লিকেশনগুলি বৈশিষ্ট্যের তালিকা গ্রহণ করবে এবং তারপরে সেগুলি অনুবাদ করবে, সবকিছুকে বড় হাতের তৈরি করবে এবং বিন্দুগুলিকে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করবে। একবার স্প্রিং বুট অ্যাপ্লিকেশনটি এই প্রক্রিয়াটি অতিক্রম করার পরে, এটি তার সাথে মেলে এমন পরিবেশের পরিবর্তনশীলগুলির সন্ধান করে এবং সেই অনুসারে পাওয়া কোনও ব্যবহার করে।

এটি এই SO প্রশ্নোত্তর শিরোনামে আরও বিশদে হাইলাইট করা হয়েছে: এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে একটি আন্ডারস্কোর সহ একটি স্প্রিং বুট সম্পত্তি কীভাবে সেট করবেন?

তথ্যসূত্র


1

এটি উবুন্টুতে সিস্টেমড পরিষেবা ব্যবহার করে করা যেতে পারে

[Unit]
Description=A Spring Boot application
After=syslog.target

[Service]
User=baeldung
ExecStart=/path/to/your-app.jar SuccessExitStatus=143

[Install] 
WantedBy=multi-user.target

আপনি আরও বিশদযুক্ত বিবরণ এবং এটি করার বিভিন্ন উপায়ের জন্য এই লিঙ্কটি অনুসরণ করতে পারেন। http://www.baeldung.com/spring-boot-app-as-a-service


1

আপনার- app.service (রেস্ট- app.service) নামের সাথে একটি স্ক্রিপ্ট তৈরি করুন। আমাদের এই স্ক্রিপ্টটি / etc / systemd / system ডিরেক্টরিতে রাখা উচিত। এখানে স্ক্রিপ্টের নমুনা সামগ্রী রয়েছে

[Unit]
Description=Spring Boot REST Application
After=syslog.target

[Service]
User=javadevjournal
ExecStart=/var/rest-app/restdemo.jar
SuccessExitStatus=200

[Install]
WantedBy=multi-user.target

পরবর্তী:

 service rest-app start

তথ্যসূত্র

লিঙ্ক বিবরণ এখানে প্রবেশ করুন


দেখে মনে হচ্ছে একই ভালো -> stackoverflow.com/a/30497095/516167
MariuszS
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.