crontab定時調用執行shell腳本出錯(mailed 165 bytes of output but got status 0x004b#012)
使用系統自帶的任務調度crontab 發現手動運行腳本能夠執行完成,可是自動定時就不能實現,檢查shell腳本也沒有錯誤。奇怪哪裏致使的問題呢?
後來在網上查詢和不斷測試,得知和系統的環境變量有關係的。發現腳本中須要添加必要的環境變量纔可使腳本自動執行。
這種狀況通常是因爲在crontab文件中沒有配置環境變量引發的。cron從用戶所在的主目錄中使用shell調用須要執行的命令。cron爲每一個shell提供了一個默認的環境,Linux下的定義以下:shell
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=用戶名 HOME=用戶主目錄
在crontab文件中定義多個調度任務時,須要特別注意的一個問題就是環境變量的設置,由於咱們手動執行某個腳本時,是在當前shell環境下進行的,程序能找到環境變量;而系統自動執行任務調度時,除了默認的環境,是不會加載任何其餘環境變量的。所以就須要在crontab文件中指定任務運行所需的全部環境變量。
不要假定cron知道所須要的特殊環境,它其實並不知道。因此用戶要保證在shell腳本中提供全部必要的路徑和環境變量,除了一些自動設置的全局變量。如下三點須要注意:
1. 腳本中涉及文件路徑時寫絕對路徑;
2. 腳本執行要用到環境變量時,經過source命令顯式引入,例如:bash
#!/bin/sh source /etc/profile
3. 當手動執行腳本沒問題,可是crontab不執行時,能夠嘗試在crontab中直接引入環境變量解決問題,例如:ide
0****./etc/profile;/bin/sh/path/to/myscript.sh
好了,這個問題就這樣解決了,反正是加上環境變量沒錯的。
————————————————測試
原文連接:https://blog.csdn.net/xingyue0422/article/details/83012000.net