2016-08-23 14 views
2

短いバージョンです:にsystemdユニット、外部スクリプトで状態を確認

私は私が呼んでスクリプトのリターンコードをチェックしたいsystemdにユニットがあります。

systemctl status service.service

ロングバージョン:私は、ステータスがパラメータとして渡されたときに、いくつかのプロセスの状態をチェックし、戻りコードに基づいて、initシステムがソフトウェアの状態を正しく返したという、lsb initスクリプトを作成しました。

このスクリプトをsystemdに適用すると、この動作の設定方法がわかりません。

答えて

3

短い回答

これはシステムでは不可能です。 systemctl status動詞は常に同じことを行いますが、ユニットごとにカスタムアクションに上書きすることはできません。

長い答え

あなたのカスタムステータススクリプトを指しType=oneshotExecStart=foo-status.serviceユニットファイルを作成し、その後systemctl start foo-statusを実行することができます。ただし、ゼロ/非ゼロの情報のみを提供します(ゼロ以外の終了コードは1に変換されます)。

ステータススクリプトの実際の終了コードを取得するには、systemctl show -pExecMainStatus foo-statusを実行します。ただしこれを実行すると、スクリプトを直接実行する方が簡単です。

0

あなたが開始/停止するサービスのコードを制御している場合は、簡単に編集して結果をファイルに保存できます。

そうでない場合は、それを行うラッパーをいつでも追加できます。

#!/bin/sh 
/path/to/service and args here 
echo $? >/run/service.result 

次に、あなたの状態は、そのファイルの内容を使用してアクセスすることができます。

STATUS=`cat /run/service.result` 
if test $STATUS = 1 
then 
    echo "An error occurred..." 
fi 

(サイドノート:。/run/はroot以外で操作している場合/tmp/を使用し、ルートによってのみ書き込み可能です)

関連する問題