Systemdからシェルスクリプトを実行しようとしています。スクリプトはコマンドラインから正常に実行されます。
スクリプト(runServer.sh)は、Javaプロセスを実行し、次のようになります。
#!/bin/bash
Java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"
内部/usr/lib/systemd/system
(または/lib/systemd/system/
他のOS)サービスファイル(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)
シェルスクリプトは必要ない場合があります。 Javaバイナリとjarファイルの両方へのフルパスを使用する場合、myService.serviceファイルからプロセスを開始できます。次のようになります。
ExecStart=/usr/bin/Java -jar /home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar
CentOS 7.2で動作します。
誰がこれをイマイチにしたかわからない。
私は解決策を見つけ、投稿して他の人の労力を節約しました。
上記の内容は機能します。ただし、最終的なサービスは次のとおりです。
[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は機能しませんでした。お役に立てば幸いです。
Javaアプリケーションのsystemd
サービスを作成する方法の詳細については、stackoverflowに関する私の回答をご覧ください。
これはJavaプロセスのsystemdテンプレートです
[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
同じ問題が発生しました(コード=終了、ステータス= 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
どこから実行するかがわかるように、WorkingDirectory =を追加する必要がある場合があります。