systemd는 분기된 데몬의 재시작 실패를 지원합니까?

systemd는 분기된 데몬의 재시작 실패를 지원합니까?

처음에는StackOverflow에 게시됨, 와서 물어 보라고하세요. 그 대화를 되돌아보면 -

  1. 아니요, 실제로 어떤 일이 발생하는지 확인하기 위해 변경 사항을 시험해 볼 수 없었습니다(프로덕션 서비스 실행에 영향을 줄 수 있음).
  2. RTFM 실사가 완료되었습니다. 그들은 이것에 관여하지 않습니다.

내 원래 질문은 다음과 같습니다.

systemd내 유닛 파일에 다음이 있다고 가정해 보겠습니다.

Type=forking
Restart=on-failure

상위 프로세스는 상태 0(하위 프로세스가 성공적으로 시작됨)으로 종료됩니다. 어느 시점에서 아이는 0이 아닌 상태로 죽습니다. 무슨 일이야? systemd하위 데몬 PID를 추적할 수 있습니다.

Process: 1768 ExecStart=/bin/mydaemon (code=exited, status=0/SUCCESS)
Main PID: 1770 (mydaemon)

부모 종료 상태만 살펴봐야 할까요 Restart=on-failure, 아니면 자식도 살펴봐야 할까요?

답변1

다음과 같은 단위 파일을 만들었습니다.

[Unit]
Description=Something

[Service]
Type=forking
WorkingDirectory=/tmp
ExecStart=/tmp/script.sh
ExecStop=/tmp/script.sh
Restart=on-failure

script.sh에는 다음 내용이 포함되어 있습니다.

#!/bin/sh
echo "Forking"
/tmp/myscript.sh &

myscript.sh에는 다음 내용이 포함되어 있습니다.

#!/bin/sh
sleep 60
exit 1

물론 60초마다 systemd가 서비스를 다시 시작합니다.

표시된 대로 다른 PID와 시작 시간을 확인하고 상위 프로세스를 다시 시작하는지 확인하세요.

linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:43:29 CEST; 57s ago
  Process: 4393 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4396 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4396 /bin/sh /tmp/script.sh
           └─4397 sleep 60

Jul 10 20:43:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:43:29 linux.suse script.sh[4393]: Forking
Jul 10 20:43:29 linux.suse systemd[1]: Started Something.
linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:44:29 CEST; 1s ago
  Process: 4409 ExecStop=/tmp/script.sh (code=exited, status=0/SUCCESS)
  Process: 4417 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4420 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4420 /bin/sh /tmp/script.sh
           └─4421 sleep 60

Jul 10 20:44:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:44:29 linux.suse script.sh[4417]: Forking
Jul 10 20:44:29 linux.suse systemd[1]: Started Something.

관련 정보