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