프로세스를 시작하기 전에 실행해야 하는 필수 비시스템 프로세스가 있음을 인식하도록 시스템화하는 방법을 찾지 못했습니다. 예를 들어 Upstart에서는 다음과 같이 할 수 있습니다.
if pgrep -f bin/postgres
내가 찾은 가장 가까운 것은 잠금 파일을 찾을 수 있는 "경로 기반 활성화"이지만 때로는 잠금 파일이 고아가 되므로 투박하고 보장되지 않습니다.
나는 systemd를 사용하지 않는 모든 프로세스를 다시 작성하여 이제 사용하고 싶지 않습니다. 이 방식으로 특정 프로세스만 시작하고 싶습니다.
그런 옵션이 없는 걸까요, 아니면 제가 못 찾은 걸까요?
답변1
제가 생각하는 최선의 선택은데릭의 피쉬 앤 칩스댓글에서 언급된 내용:ExecStartPre
:
# ...
[Service]
ExecStartPre=/usr/bin/pgrep -f bin/postgres
# ...
여기에는 다음 지침이 적용됩니다.
ExecStartPre=는 장기 실행 프로세스를 시작하는 데 사용되어서는 안 됩니다.
... pgrep
완료되면 종료되기 때문입니다. 또한 나열된 프로세스가 존재할 때 서비스가 시작되도록 허용하고 나열된 프로세스가 존재하지 않을 때 서비스가 시작되지 않도록 방지하여 원하는 기능을 달성합니다.
필요한 프로세스가 없을 때 서비스를 수동으로 시작하려고 하면 다음과 같은 결과가 나타납니다.
제어 프로세스가 오류 코드와 함께 종료되었기 때문에 데모.서비스 작업이 실패했습니다. 자세한 내용은 "systemctl status deco.service" 및 "journalctl -xe"를 참조하세요.