スクリプトを含むSystemdデバイスのExecStartPreでエラーが発生します。スクリプトパスを指定する方法は?

スクリプトを含むSystemdデバイスのExecStartPreでエラーが発生します。スクリプトパスを指定する方法は?

systemdが提供する必要があるスクリプトがありますExecStartPre。このスクリプトを置く正しいパスは何であり、ユニットでこれを指定するのですか?現在、これらのパスを使用すると失敗します(無効なデバイスファイルが原因でサービスが開始されません)。

  • スクリプトファイル
  • ./script.sh
  • /etc/systemd/system/script.sh
  • /usr/local/sbin/script.sh

状態で発生するエラーは次のとおりです。

プロセス: 8679 ExecStartPre=/usr/local/sbin/script.sh(コード=終了、ステータス=203/EXEC)

スクリプトは次のとおりです。

#!/bin/bash
if [ ! -e /var/log/myservice ];
        then
                echo "myservice's log directory doesn't exist. creating it."
                mkdir /var/log/myservice
fi

答え1

スクリプトを変更する必要がないので、お勧めします。この回答では適用可能:スクリプトをに入れる必要があります/usr/local/sbin。また、実行可能でなければなりません。あなたExecStartPreはなります

ExecStartPre=/usr/local/sbin/script.sh

ただし、ディレクトリを作成するためのスクリプトはまったく必要ありません。

ExecStartPre=mkdir -p /var/log/myservice

より良い方法は、次を使用することです。LogsDirectory=、必要に応じてディレクトリを作成し、サンドボックス内でディレクトリが利用可能であることを確認します(サービスがサンドボックスされている場合)。

LogsDirectory=myservice

関連情報