systemdはExecStartPreとExecStartPostで始まるスクリプトの戻りコードをどのように解釈しますか?

systemdはExecStartPreとExecStartPostで始まるスクリプトの戻りコードをどのように解釈しますか?

Systemdは、.serviceファイルを処理するときにExecStartPreおよびExecStartPost句でスクリプトを実行できます。このスクリプトはsystemdに値を返すことができます。

systemdの文書には、句の前に "-"が付いていない限り、0以外のすべての戻り値は失敗と見なされます。この場合、サービスの開始試行は中断されます。

サービスが単に表示されない限り、systemdはサービスの開始を再試行するため、中断された開始の試みは大きな問題ではありません。

私が継承したスクリプトでは、作成者は戻り値111がsystemdにブートを中断するだけでなく、ブートを試みてはならないことを知らせると言います。他の場所では、スクリプトはより一般的なゼロに加えて条件付きで10または11を返します。これらの戻り条件はスクリプト機能の不可欠な部分であるようです。

これらの戻りコードのsystemdの解釈を説明する情報が見つかりません。

ベストアンサー1

主なExecStartコマンドを選択できます。わからないが、疑い、使用しない-Postでください。-Pre

10と11を有効なものとして受け入れます。正常終了ステータス =

111 を完全な取引ブレーカーとみなします。ブロック終了状態の再開=

それ以外の場合は、いつでもクイックラッパーシェルスクリプトを作成して軽減できます。部族systemdでサポートされています。

私は次のようにします:

#!/bin/sh

if [ -f /run/my-script-is-dead ]
then
    # to avoid very fast loop, sleep for a bit
    sleep 10
    exit 1
fi

# Run the script itself
/path/and/usual-command

# check result
RESULT=$?

if [ $RESULT -eq 10 ] || [ RESULT -eq 11 ]
then
    exit 0
fi

if [ $RESULT -eq 111 ]
then
    touch /run/my-script-is-dead
    exit 1
fi

exit $RESULT

しかし、下のファイルを入れると/run自動的に消える再起動するたびに。より永続的なものが必要な場合は、別の場所にファイルを作成する必要があります(例/var/cache/...:)。

おすすめ記事