systemd 스타일은 프로세스 실행 상태를 비동기식으로 유지합니다.

systemd 스타일은 프로세스 실행 상태를 비동기식으로 유지합니다.

현재 내 서비스 파일에 다음 문제가 있습니다.

[Unit]
Description=XYZ Service
[Service]
User=root
Group=root
TimeoutStartSec=900
Type=simple
KillMode=process
ExecStart=/bin/bash -lc '/xyz/run.sh start'
ExecReload=/bin/bash -lc '/xyz/run.sh autorecover'
ExecStop=/bin/bash -lc '/xyz/run.sh restart'
PIDFile=/xyz/bin/dgs.pid
StandardOutput=journal
Restart=always
StartLimitInterval=60s
RestartSec=45s
[Install]
WantedBy=multi-user.target

service xyz start -->를 실행하면 시작 기능이 수행되지만, service xyz status -->를 실행하면 여전히 활성화된 것으로 표시됩니다.

답변1

이 문제는 systemd 서비스 관리자가 프로세스가 시작되기를 계속 기다리고 있을 때 발생합니다. 나는 일반적으로 다음과 같은 경우에 이것을 봅니다.

  • ExecStartPre=걸다
  • Type=notify존재하지만 ExecStart=sd-notify를 호출하지 않습니다

나는 보통 그것을 사용하지 않지만 PIDFile=, Type=forking당신이 사용할 때 그것은 보통 함께 간다 Type=simple. 이것이 나를 의심하게 만드는 것입니다 PIDFile=.

man systemd.service물론 PIDFile:

서비스가 시작된 후 서비스 관리자는 이 파일에서 서비스 기본 프로세스의 PID를 읽습니다.

누락된 PIDFile 문제를 재현할 수는 없지만 systemd 서비스 관리자가 PIDFile=해당 단위를 하나의 단위로 간주하기 전에 기본 프로세스의 PID가 채워지기를 기다리고 있는 것으로 의심됩니다 activated. 추적할 PID를 결정할 때 몇 가지 문제가 발생했습니다. 프로세스의 Type=simplePID가 파일에 기록되지 않았을 수 있습니다.

관련 정보