서비스를 처음 실행하고 다시 시작할 때 다르게 동작하는 서비스를 원합니다. 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 파일을 생성합니다. 이 파일은 주기적으로 실행됩니다.