サーバーを再起動した後、デバイスが起動しない、やや奇妙な状況に直面しました。私にとって問題は、SystemDがサービスを開始する前にサービスを停止(!)しようとしたために発生したようです。プロセスが存在しないため、再起動は失敗します。もう1つのことは、再起動するたびにこれが起こらないことです。
設定が抜けたり、間違いをしているようです。少なくともユニットファイルを修正することで、最初の効果を解決できます。
これは次の出力ですsystemctl status
。
foo.service - Foo service
Loaded: loaded (/usr/lib/systemd/system/foo.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2019-10-11 07:58:52 UTC; 57min ago
Process: 1113 ExecStop=/bin/kill -TERM $MAINPID (code=exited, status=217/USER)
Process: 1035 ExecStart=/var/opt/jdk8/bin/java -Dprocess_name=foo -Djava.io.tmpdir=/var/opt/temp/foo -jar /var/opt/foo/foo.jar --spring.config.location=file:///var/opt/foo/config/application.yml (code=exited, status=217/USER)
Main PID: 1035 (code=exited, status=217/USER)
私のユニットファイルは次のとおりです。
[Unit]
Description = Foo service
After = syslog.target
[Service]
User = somebody
ExecStart = /var/opt/jdk8/bin/java -Dprocess_name=foo -Djava.io.tmpdir=/var/opt/temp/foo -jar /var/opt/foo/foo.jar --spring.config.location=file:///var/opt/foo/config/application.yml
SuccessExitStatus = 143
ExecStop = /bin/kill -TERM $MAINPID
TimeoutSec = 300
StandardError = journal
SyslogIdentifier = foo
[Install]
WantedBy = multi-user.target
タイマーファイルを設定してこの問題を解決できますか?それともエラーが発生し続けますか?
ほとんどの場合、サーバーを再起動するとサービスは正常に実行されますが、時には失敗することがあります。手動で起動してもsystemctl start ...
機能します。ほぼ同じ設定を使用する10のサービスがあります(それらは異なるサービスを使用します.jar
)、すべて同じ問題を抱えています。私のプロメテウスデバイスも失敗するので、単にJava <->システムの問題ではありません。
ログを確認し、いくつかの同様の項目(他の単位で)を見ました。
Oct 11 07:58:51 server systemd[996]: Failed at step USER spawning /var/opt/jdk8/bin/java: No such process
Oct 11 07:58:51 server systemd[997]: Failed at step USER spawning /var/opt/prometheus/node_exporter: No such process
Oct 11 07:58:51 server systemd[1]: bar.service: main process exited, code=exited, status=217/USER