서버를 다시 시작한 후에 장치가 시작되지 않는 다소 이상한 상황에 직면했습니다. 나에게 문제는 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<->시스템 문제일 수는 없습니다.
로그를 확인하고 여러 유사한 항목(다른 단위에서)을 보았습니다.
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