crontabで実行するときに環境変数の値を確認するための簡単なスクリプトを作成しました。
#!bin/bash
echo $USER > cron.txt
script.sh
私はホームディレクトリに保存します。手動で実行すると、cron.txt
期待どおりに私のユーザー名が含まれます。
次に、crontabに次の行を追加します。
*/1 * * * * ./script.sh
cron.txt
もう一度私のユーザー名を含めたいのですが、今は空です。
crontabでスクリプトを実行するときになぜ$USER
定義されないのですか?
ベストアンサー1
cron がジョブを実行すると、現在のシェル環境とは異なる環境でジョブを実行します。
たとえば、これは./script.sh
見つかりませんでした。
2つの解決策があります。
*/1 * * * * ( cd $HOME/mydir && ./script.sh )
または
*/1 * * * * $HOME/mydir/script.sh
つまり、スクリプトが見つかる正確な場所を指定してください。
スクリプトが出力ファイルに絶対パス名を使用しない場合は、最初のオプションが優れている可能性があります。
2番目のオプションを選択した場合は、出力ファイルの場所がわかるようにスクリプトを変更します。
#!/bin/bash
echo "$USER" >"$HOME/mydir/cron.txt"
または
#!/bin/bash
( cd "$HOME/mydir" && echo "$USER" >cron.txt )
行には#!
正しい絶対パスを含める必要がありますbash
(あなたのパスは相対パスです)。
また、一部のUnices(Linux)のcronは、USER
cronジョブを実行しているユーザーのユーザー名に設定されていません。これらのシステムでは、$LOGNAME
スクリプトを呼び出すときに次のものを代わりに使用するか、次に設定しますUSER
。$LOGNAME
*/1 * * * * env USER=$LOGNAME $HOME/mydir/script.sh