systemd에는 "시스템이 아닌 일부 프로세스"가 필요합니까?

systemd에는 "시스템이 아닌 일부 프로세스"가 필요합니까?

프로세스를 시작하기 전에 실행해야 하는 필수 비시스템 프로세스가 있음을 인식하도록 시스템화하는 방법을 찾지 못했습니다. 예를 들어 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"를 참조하세요.

관련 정보