
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/...
:)。