我的系统中有两个服务: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
第一个服务中使用。但我思考那是没有必要的)。