いくつかの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 1
。RemainAfterExit=yes
プロセスが正常に使用された後、exit 0
サービスはアクティブであると見なされます。
ExecStartPost=
また、ステータスコマンドが失敗した場合にサービスが失敗するようにするrun statusコマンドを使用することもできます。ただし、これはまたExecStart
コマンドを受け取る必要があることを意味しますexit 0
。