カスタムコマンドを使用してサービスを作成し、systemdの状態を確認します。

カスタムコマンドを使用してサービスを作成し、systemdの状態を確認します。

いくつかのiptablesルールを設定するスクリプト()があります/bin/myrules

このユニットファイルを使用してsystemdを介して起動しますmyrules.service

[Unit]
Description=My Rules

[Service]
Type=oneshot
ExecStart=/sbin/myrules start
ExecStop=/sbin/myrules stop
RemainAfterExit=no

[Install]
WantedBy=multi-user.target

スクリプトが実行され終了した後、サービスが「生きている」ことをsystemdが知りたいのです(iptablesルールが正しく設定されている場合)。

私のスクリプトはすでにiptablesルールの状態を確認できます。ランニング:

/bin/myrules status

すべてが正常な場合、終了コード0が返されます。エラーがある場合は1が返されます。

systemctl status myruleコマンドが私の特定のスクリプトを呼び出してステータスが正常であることを確認し、それに応じてメッセージを返すようにできますか?

編集するsystemctl status myrules:次のようなものを表示する必要があります。

Active: active (whatever)

[編集2iptables] ただし、規定に変更がある場合にはもう一度確認する必要がありますすべてのルールが有効になると、次の情報が表示されます。

Active: inactive (whatever)

これは、サービスの状態を確認するために実行している場合myrules statusにのみ可能です。

PS:iptablesに関する追加情報は必要ありません。 -Cオプションを使用して確認します。

答え1

ワンショットタイプの場合、systemdはプロセスを実行して返されたときにプロセスが完了したと見なし、非アクティブに戻るか、プロセスがRemainAfterExit=yes終了した後もサービスをアクティブに保ちます。

ExecStartスクリプトがiptables設定を正常に変更した場合は成功しexit 0、失敗した場合は成功する必要がありますexit 1RemainAfterExit=yesプロセスが正常に使用された後、exit 0サービスはアクティブであると見なされます。

ExecStartPost=また、ステータスコマンドが失敗した場合にサービスが失敗するようにするrun statusコマンドを使用することもできます。ただし、これはまたExecStartコマンドを受け取る必要があることを意味しますexit 0

関連情報