mineCraftサーバーをサービス方式で起動する単純なsystemdスクリプトがあります。 SOはCentOS 7です。ここでスクリプトは次のとおりです。
[Unit]
Description=Minecraft Server
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/root/Minecraft
ExecStart=/bin/Java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
Restart=on-failure
[Install]
WantedBy=multi-user.target
サービスの開始は正常に機能しますが、を停止すると、サービスは失敗した状態のままになります。見る:
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: active (running) since Mon 2015-06-01 16:00:12 UTC; 18s ago
Main PID: 20975 (Java)
CGroup: /system.slice/minecraftd.service
└─20975 /bin/Java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
systemctl stop minecraftd.service
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: failed (Result: exit-code) since Mon 2015-06-01 16:01:37 UTC; 3s ago
Process: 20975 ExecStart=/bin/Java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui (code=exited, status=143)
Main PID: 20975 (code=exited, status=143)
何か案が?
ありがとう
終了コード143は、プログラムが終了するように指示するSIGTERMシグナルを受信したが、そのシグナルを適切に処理しなかったことを意味します。これはほとんど常にプログラミングエラーが原因であり、すべてのタイプのJavaアプリケーションでよく見られます。
ユニットファイルに「成功」の終了ステータスとして終了コードを追加することで、これを抑制できるはずです。
[Service]
SuccessExitStatus=143
Michaelの回答を補足するために、ここでは終了コード143が正常です。これは、Java VMがSIGTERMシグナルを受信し、systemdが送信して停止する方法です。プロセス。SIGTERMシグナルの数値は15です(man signal
を参照)。
現在、Posix仕様によれば、「シグナルを受信したために終了したコマンドの終了ステータスは、128より大きいと報告されます」。 ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_08_02 )
ここでJava VMは128 + 15を追加し、143のこの終了コードを取得します。
Javaプログラムが外部信号のために終了したことを確認できるため、このゼロ以外の終了コードはここで意味があり、どの信号を見つける機会が得られます。