Você está perdendo Type=oneshot
no primeiro serviço - você não está realmente esperando o cheque terminar! Em seguida, use RemainAfterExit=yes
para que o serviço não caia novamente.
Existem dois serviços no meu sistema: A e B. Antes de iniciar o serviço A, eu quero fazer uma verificação automática. Se a verificação falhar, o serviço A não precisa ser iniciado. Você pode dizer que eu posso usar ExecStartPre ou ExecStartPre. Sim, mas não pode parar o serviço A start. Então eu quero usar "require" no systemd, criar um novo serviço B que config como abaixo:
[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 assim:
#!/bin/bash
exit 1
service A config como abaixo:
[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
Eu pensei que o serviço B começou a falhar, então o serviço A também falhou. No entanto, o serviço A foi iniciado. Existe alguma coisa errada para a minha configuração? Obrigado!