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