Systemd - 서비스는 첫 실행과 다시 실행을 어떻게 결정합니까?

Systemd - 서비스는 첫 실행과 다시 실행을 어떻게 결정합니까?

서비스를 처음 실행하고 다시 시작할 때 다르게 동작하는 서비스를 원합니다. systemd를 사용하여 이를 달성할 수 있습니까? (저는 임베디드 운영 체제에서 systemd를 사용하고 있습니다).

ExecReload 및 ExecStart를 사용해 보았지만 "systemctl restart" 명령을 사용할 때만 ExecReload가 실행됩니다. 반면에 ExecStart는 서비스가 다시 시작된 후에 실행됩니다(Restart=on-failure 및 RestartSec=5입니다).

답변1

이를 사용하여 systemctl set-environment향후 서비스 실행에 일부 값을 푸시할 수 있습니다. 예를 들어, 단위의 경우:

[Unit]
Description=testing
[Service]
Type=oneshot
ExecStart=/my/command myarg1 ${MYDONE}
ExecStart=/usr/bin/systemctl set-environment MYDONE=1
[Install]

systemctl start <unit>전달된 첫 번째 및 마지막 인수는 /my/command환경에 있고 환경에 있지 않습니다 ''. MYDONE이후 실행 시 마지막 매개변수는 환경 1에 있게 됩니다.MYDONE=1

답변2

다음을 사용하여 별도의 .service 파일에서 첫 번째 실행을 정의할 수 있습니다.

[Service]
Type=oneshot

그런 다음 해당 파일에 의존하는 또 다른 .service 파일을 생성합니다. 이 파일은 주기적으로 실행됩니다.

관련 정보