Crontabから実行する環境変数をチェックする簡単なスクリプトを作成しました。
#!bin/bash
echo $USER > cron.txt
ホームディレクトリにscript.shとして保存します。
Crontab設定:*/1 * * * * ./script.sh
手動で実行すると機能しますが、crontabからは機能しません。出力でcron.txtファイルにユーザー名が表示されるはずですが、表示されません。
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