시스템 스크립트에서 분기

시스템 스크립트에서 분기

systemd 서비스가 포크를 처리하기를 원합니다. (내 파일 자체는 포크를 처리하지 않습니다. 그래서 이를 처리하기 위해 systemd에 의존합니다.)

내 .service 파일:

[Unit]
Description=swamp services management service
After=syslog.target

[Service]
Type=forking
ExecStart=/usr/bin/swamp

[Install]
WantedBy=multi-user.target

질문

Type=forking내가 달성하려는 목적에 사양이 충분한가요? 아니면 내 서비스가 포크/데몬을 처리할 것이라는 사실을 upstart에 실제로 알려주는 upstart에서 포크를 기대하는 것과 비슷합니까(올바르게 이해했는지 확실하지 않으면 init 스크립트 작성이 처음입니다).

답변1

systemd에는 훌륭한 문서가 있습니다. 페이지 보기서비스 파일:

분기로 설정된 경우 ExecStart=로 구성된 프로세스는 시작의 일부로 분기()를 호출해야 합니다. 시작이 완료되고 모든 통신 채널이 설정되면 상위 프로세스가 종료될 것으로 예상됩니다. 하위 프로세스는 계속해서 기본 데몬으로 실행됩니다. 이는 전통적인 UNIX 데몬의 동작입니다. 이 설정을 사용하는 경우 systemd가 데몬의 기본 프로세스를 식별할 수 있도록 PIDFile= 옵션도 사용하는 것이 좋습니다. 상위 프로세스가 종료되면 systemd는 계속해서 후속 유닛을 시작합니다.

따라서 이것을 사용하면 systemd에게 반환을 type기다린 다음 여전히 실행 중이라고 생각하게 됩니다 . 이것을 구현하는 것은 여전히 ​​귀하의 책임입니다...swamp

답변2

systemd에서 포크를 처리하려면 예를 들어 또는 Type=simple를 사용해야 합니다 Type=notify. 그러면 systemd가 포크 작업을 수행할 것입니다.

swamp실행 파일을 수정할 수 있다면 이것이 Type=notify최선의 솔루션입니다. 실행 파일이 성공적으로 초기화되면 systemd에 알려야 합니다. 이는 systemctl start swamp명령줄에서 호출할 때 swamp가 초기화될 때까지 기다리고 명령줄을 초기화할 때 일반적으로 원하는 오류 메시지를 인쇄한다는 의미입니다.

Type=notify로 작성된 실행 파일의 예는 다음 셸 스크립트를 참조하세요.

#!/bin/bash                                                                     
sleep 3
systemd-notify READY=1
sleep 1000000

관련 정보