
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 還不夠呢? crontab 到底有哪些環境變數以及 source .bashrc 到底做了什麼(以便 crontab 不考慮它)?
謝謝。
答案1
我有一些猜測,但可能是錯的:
- 當我們打開 bash shell 時,我們啟動一個 bash 進程,並且在運行 .bashrc 時,它只會更改該 bash 進程的環境
- crontab有自己的進程,與開啟的bash進程無關
- 當取得.bashrc時,它只對bash進程進行更改(儘管運行crontab時沒有任何更改??),因此crontab仍然沒有對環境變數進行任何更改
因此,取得 .bashrc 對 crontab 沒有幫助。