服务器重启后,Systemd 单元启动失败

服务器重启后,Systemd 单元启动失败

我遇到了一个相当奇怪的情况,服务器重新启动后单元无法启动。对我来说,这个问题似乎是由 SystemD 尝试在启动服务之前停止(!)服务引起的。由于重新启动该进程不存在,因此失败。更奇怪的是,这种情况并不是每次重新启动时都会发生。

我想要么是我错过了一个设置,要么是我犯了一个错误,至少第一个效果可以通过修复我的单元文件来解决:

这是以下的输出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<->systemd 问题。

我检查了日志并看到了几个类似的条目(来自不同的单位):

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

相关内容