오류 없이 다른 서비스 단위가 실행되는 동안에만 서비스 단위를 시작하는 방법은 무엇입니까?
2개의 서비스 단위가 있습니다.
#echo-date-0.service
[Unit]
Description=
[Service]
ExecStart=/home/user/bash/echo-date-0.sh
[Install]
WantedBy=multi-user.target
#echo-date-1.service
[Unit]
Description=
[Service]
ExecStart=/home/user/bash/echo-date-1.sh
Requires=echo-date-0.service
After=echo-date-0.service
[Install]
WantedBy=multi-user.target
내 스크립트 echo-date-0.sh는 종료 코드 1(exit 1)을 반환하고 echo-date-0.service의 상태를 확인하면 다음이 표시됩니다.
Active: failed (Result:exit-code)
Process: (code=exited, status=1/FAILURE)
그러나 echo-date-0.service가 필요한데도 echo-date-1.service가 실행됩니다. echo-date-0.service가 실패할 경우 echo-date-1.service 실행을 중지하는 방법은 무엇입니까?
답변1
#echo-date-0.service
[Unit]
Description=
[Service]
Type=oneshot
## Stay alive for other services to acknowledge
RemainAfterExit=yes
ExecStart=/home/user/bash/echo-date-0.sh
[Install]
WantedBy=multi-user.target
#echo-date-1.service
[Unit]
Description=
Requires=echo-date-0.service
After=echo-date-0.service
## A unit that must be in an active non-erroring state
## and combos great with After=
BindsTo=echo-date-0.service
[Service]
ExecStart=/home/user/bash/echo-date-1.sh
[Install]
WantedBy=multi-user.target
Jesse_b적어도 나에게는 BindsTo=
,유닉스 시스템유용할 것입니다.
그리고비곤섹션에 & [Unit]
가 있어야 한다고 올바르게 명시되어 있습니다 .Requires=
After=
실제로 echo-date-0.service
위의 (작동하길 바라는) 예에서는 여전히살다서비스로(따라서 systemctl stop echo-date-0.service
상태를 재설정하려면 실행해야 함) 이렇게 설정하고 After=
&를 결합하여 잘못될 수 없는 서비스를 가리키게 BindsTo=
하면echo-date-1.service
~해야 한다OP가 요청한 것을 여기에서 구현하십시오.
이 경우, 어떤 형태로든 연결된 서비스를 보려면 systemctl list-dependencies --before <service/trigger>
계속 실행할 수 있어야 합니다 .echo-date-0.service
답변2
Requires=
섹션 After=
에 있어야 합니다 .[Unit]