crontabでスクリプトを実行したときに$ USER環境変数が定義されていません。

crontabでスクリプトを実行したときに$ USER環境変数が定義されていません。

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は、USERcronジョブを実行しているユーザーのユーザー名に設定されていません。これらのシステムでは、$LOGNAMEスクリプトを呼び出すときに次のものを代わりに使用するか、次に設定しますUSER$LOGNAME

*/1 * * * * env USER=$LOGNAME $HOME/mydir/script.sh

おすすめ記事