“Require” parece não funcionar no systemd

1

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!

    
por workhardcc 26.08.2017 / 11:17

1 resposta

0

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.

    
por 27.08.2017 / 13:43

Tags