“Require”似乎在 systemd 中不起作用

“Require”似乎在 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第一个服务中使用。但我思考那是没有必要的)。

相关内容