[Linux] 讓 crontab 裡的排程工作,可以使用到 .bashrc 設定的環境變數

[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 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料