systemd의 클래식 초기화 스크립트에 대해 RemainAfterExit=no를 설정합니다.

systemd의 클래식 초기화 스크립트에 대해 RemainAfterExit=no를 설정합니다.

저는 Debian Jessie에서 클래식 init 스크립트를 사용하여 사용자 정의 서비스를 실행합니다. Debian Jessie는 systemd를 사용합니다. 내가 init 스크립트를 사용하는 이유는 systemd가 없는 Debian Wheezy에서도 동일한 서비스를 사용하기 때문입니다.

가끔 서비스가 다운될 수 있으므로 서비스가 중지되면 다시 시작하고 싶습니다. 내 이해는 systemd가 이 문제를 처리할 것이라는 것입니다. 그러나 (없이 systemctl stop service) 서비스를 수동으로 종료하면 systemctl status서비스가 active (exited).

이것은 systemd가 단순히 서비스를 프로세스 없이 "실행"할 수 있는 서비스로 간주한다는 것을 의미한다고 이해합니다.설명서에는 RemainAfterExit이 동작을 구성하는 방법이 언급되어 있습니다., 그러나 이것은 단위 파일에 사용하기 위한 플래그이므로 init 스크립트만 있습니다.

초기화 서비스가 활성으로 간주되려면 프로세스가 필요하다는 것을 systemd에 알릴 수 있는 방법이 있습니까? 즉, active (exited)원하지 않는 상태임을 알려주시겠습니까?

답변1

일반적인 상용구 시스템 단위 파일을 작성하여 문제를 해결했습니다. 에 파일을 저장합니다 /etc/systemd/system/$SERVICE.service.

$SERVICE서비스 이름으로 바꿉니다 .

[Unit]
Description=$SERVICE init script wrapper
After=network.target

[Service]
ExecStart=/etc/init.d/$SERVICE start
ExecStop=/etc/init.d/$SERVICE stop
ExecReload=/etc/init.d/$SERVICE reload
PIDFile=/var/run/$SERVICE.pid
RemainAfterExit=no
Restart=always
Type=forking

[Install]
WantedBy=multiuser.target

systemd의 내부를 새로 고치려면 실행하세요 systemctl daemon-reload.

관련 정보