サーバーを再起動した後、Systemdデバイスは起動しません。

サーバーを再起動した後、Systemdデバイスは起動しません。

サーバーを再起動した後、デバイスが起動しない、やや奇妙な状況に直面しました。私にとって問題は、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

関連情報