ExecConditionどのように反対になることができますか?

ExecConditionどのように反対になることができますか?

SysVサービスをスクリプトからsystemdの単位ファイルに移行したいと思います。ホストとスレーブの2台のコンピュータがあります。どちらのシステムも起動時にサービスが有効になりますが、サービスは常にマスターシステムで実行されます。他のコンピュータのサービス状態を確認し、それに基づいて次のコマンドを実行し続けたり、何もしないExecConditionを追加したいと思います。

systemctl is-active myservice -H kbc01

このコマンドは、活動状態または非活動状態を表示します。

active (0)
inactive (3)

私の意見では、他のコンピュータのサービスがアクティブ(0)の場合、次のExecStartコマンドは実行されません。他のコンピュータのサービスがダウンしている場合(3)、次のExecstartコマンドを実行します。

systemd ドキュメントによると、次の ExecCondition= コマンドは 1 から 254 (含む) の終了コードで終了し、残りのコマンドはスキップされ、デバイスは失敗としてマークされません。

どうすれば逆にできますか?

ホスト(kbc01):

[Unit]
Description=Aplication 
After=local-fs.target network-online.target

[Service] 
ExecCondition=systemctl is-active myservice -H kbc01
ExecStart=/home/user/aplication/bin/myservicestart
ExecStop=/home/user/aplication/bin/myserviceshutdown 
Restart=on-failure

[Install] 
WantedBy=multi-user.target

補助機械(kbc02):

[Unit] 
Description=Aplication 
After=local-fs.target network-online.target

[Service]
ExecCondition=systemctl is-active myservice -H kbc02 
ExecStart=/home/user/aplication/bin/myservicestart
ExecStop=/home/user/aplication/bin/myserviceshutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

ベストアンサー1

systemctl is-active直接呼び出すのではなく、ロジックを使用してbashスクリプトを呼び出すことができます。

[Service]
ExecCondition=/usr/local/sbin/myservice-is-needed kbc02
#!/bin/bash
# /usr/local/sbin/myservice-is-needed

systemctl is-active myservice -H "$1"
retval=$?

if [ "$retval" -ne 0 ]; then 
    exit 0;
fi

exit 1

または1行にしてください:

[Service]
ExecCondition=/bin/bash -c '! systemctl is-active myservice -H kbc02'

おすすめ記事