내 시스템에는 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
(원래는 첫 번째 서비스에서도 사용하자고 제안했지만 ,생각하다그럴 필요는 없습니다.)