systemd는 다른 서비스가 오류 없이 실행되는 경우에만 서비스를 시작합니다.

systemd는 다른 서비스가 오류 없이 실행되는 경우에만 서비스를 시작합니다.

오류 없이 다른 서비스 단위가 실행되는 동안에만 서비스 단위를 시작하는 방법은 무엇입니까?

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]

관련 정보