我遇到了一个相当奇怪的情况,服务器重新启动后单元无法启动。对我来说,这个问题似乎是由 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