"필수"가 systemd에서 작동하지 않는 것 같습니다.

"필수"가 systemd에서 작동하지 않는 것 같습니다.

내 시스템에는 A와 B라는 두 가지 서비스가 있습니다. 서비스 AI를 시작하기 전에 몇 가지 자동화된 점검을 수행해야 합니다. 검사에 실패하면 서비스 A를 시작할 필요가 없습니다. ExecStartPre 또는 ExecStartPre를 사용할 수 있다고 말할 수도 있습니다. 예, 하지만 서비스 A의 시작은 중지할 수 없습니다. 그래서 systemd에서 "require"를 사용하여 다음 구성 파일로 새 서비스 B를 생성하고 싶습니다.

[Unit]
Description=api
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
Before=kubelet.service

[Service]

ExecStart=/bin/bash /root/check_init.sh 
Restart=no

[Install]
WantedBy=multi-user.target

/root/check_init.sh는 다음과 같습니다:

#!/bin/bash
exit 1

서비스 A는 다음과 같이 구성됩니다.

[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
After=api.service
Requires=api.service

[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet \
            $KUBE_LOGTOSTDERR \
            $KUBE_LOG_LEVEL \
            $KUBELET_API_SERVER \
            $KUBELET_ADDRESS \
            $KUBELET_PORT \
            $KUBELET_HOSTNAME \
            $KUBE_ALLOW_PRIV \
            $KUBELET_POD_INFRA_CONTAINER \
            $KUBELET_ARGS
Restart=on-failure

[Install]
WantedBy=multi-user.target

서비스 B가 시작되지 않은 것 같습니다. 그러면 서비스 A도 실패했을 것입니다. 그러나 서비스 A가 시작됩니다. 내 구성에 문제가 있나요? 감사해요!

답변1

첫 번째 서비스를 놓치셨습니다 Type=oneshot. 실제로 검사가 완료되기를 기다리지 않으셨습니다!

RemainAfterExit=yes(원래는 첫 번째 서비스에서도 사용하자고 제안했지만 ,생각하다그럴 필요는 없습니다.)

관련 정보