Systemd से एक जावा प्रक्रिया चल रही है


16

मैं systemd से एक शेल स्क्रिप्ट निष्पादित करने की कोशिश कर रहा हूं। स्क्रिप्ट कमांड लाइन से ठीक चलती है।

स्क्रिप्ट (runServer.sh), जावा प्रक्रिया को चलाता है और इस तरह दिखता है:

#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"

अंदर /usr/lib/systemd/system(या /lib/systemd/system/अन्य OSes पर) मैंने एक सेवा फ़ाइल (myService.service) बनाई है:

[Unit]
Description=My Servers service
[Service]
ExecStart=/home/pruss/dev/ServerDeploy5-4.1/Server/runServer.sh
User=root
Type=oneshot
[Install]
WantedBy=multi-user.target

परिणाम

Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.

मैं कोशिश करूँगा:

systemctl status myService.service


   Loaded: loaded (/usr/lib/systemd/system/myService.service; disabled)
   Active: failed (Result: exit-code) since Thu 2015-07-23 12:27:38 BST; 26s ago
   Main PID: 28413 (code=exited, status=203/EXEC)

और, यदि आप वर्ग नहीं मिला अपवाद प्राप्त हो रहे हैं - इतने पर मेरा उत्तर पर एक नज़र ले सकता है stackoverflow.com/questions/21503883/... बाहर बेवकूफ मुद्दा ;-( आंकड़ा करने के लिए अपने जीवन के कुछ घंटे लगते हैं
JGlass

जवाबों:


11

आपको शेल स्क्रिप्ट की आवश्यकता नहीं हो सकती है। आप myService.service फ़ाइल से प्रक्रिया शुरू कर सकते हैं बशर्ते आप जावा बाइनरी और जार फ़ाइल दोनों के लिए पूर्ण पथ का उपयोग करें। इसे कुछ इस तरह देखना चाहिए

ExecStart=/usr/bin/java -jar /home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar

CentOS 7.2 पर काम करता है।


1
मेरी राय यह है, कि स्क्रिप्ट को बनाए रखना आसान है ...
बेतलिस्टा

10

यकीन नहीं होता कि किसने दिया ये अंगूठा ..

मैंने इसका हल ढूंढ लिया और दूसरों को प्रयास करने के लिए इसे पोस्ट किया।

आप ऊपर क्या काम देखते हैं। हालाँकि, अंतिम सेवा इस प्रकार है:

[Unit]
Description=MyProgramThing
[Service]
ExecStart=/home/prus/dev/Blah-4.1/Server/runServer.sh
Type=simple
User=prus
[Install]
WantedBy=multi-user.target

महत्वपूर्ण रूप से, मेरी शेल स्क्रिप्ट के अंदर, मुझे .jar फ़ाइल में पूर्ण पथ डालने की आवश्यकता थी। java -jar / home/myprog.jar आदि

यानी ./myJar.jar काम नहीं किया। उम्मीद है की वो मदद करदे।


1
आप ExecStop के लिए कैसे खाते हैं?
बालाजी बोग्गाराम रामनारायण

Ctrl + सी / SIGINT जावा प्रक्रिया के लिए भेजा जाता है जब आप, अगर आपको लगता है कि का जवाब एप्लिकेशन systemd सेवा बंद तो अच्छा है, TimeoutStopSec के बाद: यह SIGKILL भेज देंगे (डिफ़ॉल्ट DefaultTimeoutStopSec 90 के दशक)
राडू Toader

4

स्टैकओवरफ़्लो पर मेरे जवाब पर एक नज़र डालें, जो यह बताता है कि systemdजावा एप्लिकेशन के लिए एक सेवा कैसे बनाई जाए :

/programming//a/22121547/272180


1
धन्यवाद, मैंने जो लिखा है, उसे भरने के लिए यलगोड्ट। मैंने इसे एक साल पहले सुलझाने का प्रबंधन किया था, लेकिन अगर आपका लेखन किसी और की मदद करता है, तो यह सब अच्छा है।
मोम_बलिकल

2

यह एक प्रक्रिया के लिए जावा के लिए मेरा सिस्टम टेम्पलेट है

[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


Environment="ENV=stage"

#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=stage \
        -Denvironment-type=stage \
        -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 \
        -Xms768m \
        -Xmx768m \
        -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

0

मुझे एक ही समस्या थी (कोड = बाहर, स्थिति = 203 / EXEC)।

अपने उपयोगकर्ता को स्क्रिप्ट निष्पादन की अनुमति देना न भूलें।

आप 777 को कुछ अधिक प्रतिबंधक में बदलना चाह सकते हैं।

chmod 777 /home/yourscript.sh

या

chmod u+x /home/yourscript.sh

फिर:

systemctl daemon-reload 
systemctl start yourScript.service 
systemctl enable yourScript.service

0

आपको एक कार्यदिशा जोड़ने की आवश्यकता हो सकती है = इसलिए यह जानता है कि चीजों को कहाँ से चलाना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.