crontab は .bashrc をソースした後でも環境変数を見つけることができません

crontab は .bashrc をソースした後でも環境変数を見つけることができません
crontab -e
00 00 * * * /home/username/run.sh >> /home/username/log 2>&1

run.sh 内:

source /home/username/.bashrc
java

crontab ジョブがトリガーされると、ログに次のエラーが表示されます:

/home/username/run.sh: 1: /home/username/run.sh: java: not found

ただし、Java パスは /home/username/.bashrc に設定されているため、ソースによって Java パスが設定されることを期待していました。

次の方法で修正できることがわかっています:

export PATH="/usr/local/jdk1.8.0_231/bin:$PATH"
java

しかし、.bashrc を source するだけではなぜ不十分なのでしょうか? crontab には具体的にどのような環境変数があり、source .bashrc は具体的に何を行うのでしょうか (crontab がそれを考慮しないようにするため)?

ありがとう。

答え1

いくつか推測はありますが、間違っているかもしれません:

  • bashシェルを開くとbashプロセスが開始され、.bashrcを実行すると、このbashプロセスの環境のみが変更されます。
  • crontabには、開かれたbashプロセスとは関係のない独自のプロセスがあります。
  • .bashrc をソースすると、bash プロセスのみが変更されます (crontab を実行すると何も変更されません)。そのため、crontab では環境変数に変更はありません。

したがって、.bashrc をソース化しても crontab には役立ちません。

関連情報