
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 には役立ちません。