web-dev-qa-db-ja.com

$ USER環境変数がcrontabから実行されていません

Crontabから実行する環境変数をチェックする簡単なスクリプトを作成しました。

#!bin/bash
echo $USER > cron.txt

ホームディレクトリにscript.shとして保存します。

Crontab設定:*/1 * * * * ./script.sh

手動で実行すると機能しますが、crontabからは機能しません。出力でcron.txtファイルにユーザー名が表示されるはずですが、表示されません。

4
d a i s y

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
5
Kusalananda