[Linux] 讓 crontab 裡的排程工作,可以使用到 .bashrc 設定的環境變數
今天在 Linux 上設定一個 cron job 時,
發現預計要執行的程式,似乎一直沒有成功執行,
但是如果手動在終端機 (terminal) 下執行程式,
卻又沒有問題…
想想應該是之前就有遇過,
cron job 不會吃到類似 ~/.bashrc 或 ~/.bash_profile 等檔案裡的環境變數設定。
需要的話,可以在 crontab 裡設定 PATH 環境變數。
但老實說,那樣還是有點麻煩,
畢竟已經習慣把環境變數都設定在 ~/.bashrc 了,
另外設在 crontab 的話,要修改還得兩邊都改…
後來查到一個做法,就是在執行指令之前,
執行 source ~/.bashrc,再執行指令,
這樣 ~/.bashrc 裡設定的環境變數,就可以帶給後面的指令了~
下面是一個例子,
我仍然在 crontab 中設定了 PATH 環境變數,
但其他已經在 ~/.bashrc 設定的環境變數,
我就利用 source ~/.bashrc 的方式讀進來後,
再執行我要跑的 cron_review_jobs.sh:
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin */1 * * * * source ~/.bashrc; ~/cron_review_jobs.sh > /tmp/review.log 2>&1
因為 cron job 出錯的話真的不是很好除錯 (跟你在終端機執行的環境不同),
所以我通常會把 stdout/stderr 轉向到一個暫存檔,
方便觀察是否有錯誤囉~
參考資料:
linux – Where can I set environment variables that crontab will use? – Stack Overflow
Scheduling Cron Jobs with Crontab | Linuxize
(本頁面已被瀏覽過 2,391 次)