systemd 재시작 = 항상 혼란

systemd 재시작 = 항상 혼란

실행할 시스템 서비스를 생성하고 시작할 때 스크립트를 실행하려면 다음을 포함해야 합니다.재시작=항상.service 파일에서 이는 다시 실행된다는 의미입니다.실행 시작스크립트가 완료된 후 루프에서 스크립트를 계속 실행하시겠습니까?

나는 내 프로젝트(아래 참조)의 서비스 파일을 보고 여기서 무슨 일이 일어나고 있는지 정확히 이해하려고 노력하고 있습니다. app_script.sh start가 지속적으로 호출됩니까, 아니면 시스템 서비스가 중지된 경우에만 호출됩니까? 나는 이것에 대해 혼란스러워합니다.

[Unit]
Description=application script 
ConditionPathExists=/application
After=network.target app.service data.service 

[Service]
Type=simple
ExecStart=/application/app_script.sh start
ExecStop=/application/app_script.sh stop
#RemainAfterExit=yes
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

답변1

.service 파일에 Restart=always를 포함하면 스크립트가 완료된 후 ExecStart를 다시 실행하여 루프에서 스크립트를 계속 실행한다는 의미입니까?

Restartalways이 옵션은 다음과 같이 시작된 프로세스가 종료될 때만 호출됩니다.systemd.service 문서, 다음과 같은 이유로 프로세스가 종료되면 서비스가 다시 시작됩니다.

  • 종료 코드 또는 신호 지우기
  • 불결한 종료 코드
  • 신호가 깨끗하지 않습니다.
  • 정지시키다
  • 지키는 개

문서는 계속됩니다:

위 설정에 대한 예외로 RestartPreventExitStatus=(아래 참조)에 종료 코드나 신호가 지정되거나 systemctl stop 또는 이와 동등한 기능을 사용하여 서비스가 중지된 경우 서비스가 다시 시작되지 않습니다. 또한 RestartForceExitStatus=에 종료 코드나 신호가 지정된 경우 서비스는 항상 다시 시작됩니다(아래 참조).

RestartForceExitStatus 또는 RestartPreventExitStatus를 구성하지 않았으므로 프로세스는 systemctl stop("또는 동등한 작업") 동안 systemd에 의해서만 중지됩니다.

app_script.sh start가 지속적으로 호출됩니까, 아니면 시스템 서비스가 중지된 경우에만 호출됩니까?

현재로서는 둘 다 아닙니다. 위에서 언급했듯이 지속적으로 호출되지는 않습니다. 만약에제공하다중지하십시오(물론 전화는 제외 /application/app_script.sh stop).프로세스서비스를 중지하여 시작되었습니다.

서비스는 인수를 실제 서비스로 처리 Type=simple하도록 systemd에 지시합니다 . ExecStart명명 규칙은 /application/app_script.sh start하나 이상의 다른 스크립트나 바이너리를 호출할 수 있는 셸 스크립트를 포함하기 위한 것입니다. 쉘 스크립트가 프로세스를 분기하고 자체 종료하는 경우 systemd는 서비스 프로세스가 종료된 것으로 가정합니다.

관련 정보