저는 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
.