crontab的問題總結

2021-07-09 06:08:45 字數 1505 閱讀 7224

最近用python寫了一些資料統計的指令碼,並使用crontab自動執行,但是配置crontab總是要過幾個坑才行的,這裡總結一下這次遇到的坑。

要將crontab命令的輸出記錄到日誌檔案中,可以使用重定向,不僅要重定向stdout也要重定向stderr,因為python直譯器會將異常輸出到stderr。示例:

$home/path/to/script > $home/log/file 2>&1
crontab會以使用者的身份執行配置的命令,但是不會載入使用者的環境變數,crontab會設定幾個預設的環境變數,例如shell、path和home等,一定要注意path可不是使用者自定義的path。

我們往往會在.bash_profile檔案中定義一些全域性的環境變數,但是crontab執行時並不會載入這個檔案,所以你在shell中正常執行的程式,放到crontab裡就不行了,很可能就是因為找不到環境變數了。要解決這個問題只能是自己載入環境變數了,可以在shell指令碼中新增source $home/.bash_profile,或者直接新增到crontab中。

0

12 * * * source

$home/.bash_profile && $home/path/to/script > $home/log/file 2>&1

我們在寫指令碼時往往會使用相對路徑,但是在crontab執行指令碼時,由於工作目錄不同,就會出現找不到檔案或者目錄不存在的問題。

解決方法是指令碼中使用絕對路徑或者在執行程式前切換工作目錄,例如直接在crontab命令中切換工作目錄:

0

12 * * * source

$home/.bash_profile && cd

$home/path/to/workdir && ./script > /home/log/file 2>&1

我寫的python程式中輸出了一些中文(編碼是utf-8),在shell中直接執行沒有問題,但是crontab執行時出現了unicodeencodeerror的錯誤,google了一下發現這個問題不僅僅是在crontab中會出現,在使用管道或者重定向的時候都會出現這個問題,原因是編碼不同。

在終端中直接執行python程式時,python會將輸出內容自動編碼為終端所使用的編碼,我使用的終端編碼是utf-8,所以不會出錯,輸出的內容也是正常的。但是在使用管道或者重定向時,編碼格式為ascii,python會用ascii編碼格式去encode輸出的字串,但是字串的編碼使用的時utf-8,所以會出現unicodeencodeerror的錯誤。

解決方法:

方法一:在程式中輸出的字串都加上encode('utf-8')

方法二:在crontab中加上pythonioencoding=utf-8,將python的stdout/stderr/stdin編碼設定為utf-8。

crontab命令總結

基本用法 crontab命令用於在linux伺服器上設定定時任務,通過crontab help可以檢視命令使用方式 usage crontab u user file crontab u user e l r default operation is replace,per 1003.2 e edi...

crontab用法總結

crontab是什麼 crontab命令常見於unix和類unix的作業系統之中,用於設定週期性被執行的指令。crontab 一詞 於希臘語chronos 原意是時間.而crond是linux下用來週期性的執行某種任務或等待處理某些事件的乙個守護程序,作業系統缺省會安裝此服務工具,並且會自動啟動cr...

crontab使用問題

20120908 wcdj crontab e 新增任務 crontab l 顯示新增的任務 crontab r 刪除全部任務 1 vi etc crontab 新增任務 2 etc init.d cron restart 使之生效 注意一點 環境變數的問題,要確保crontab使用的是當前使用者的...