「必須」がsystemdで動作しないようです。

「必須」がsystemdで動作しないようです。

私のシステムには、AとBという2つのサービスがあります。サービス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(元は最初のサービスでも使用しようと提案したが、考える必要はありません。)

おすすめ記事