crontab系統使用雷區(爲何cron任務沒運行)

1.        寫好的程序,手動執行沒問題,上crontab就報錯
Crontab任務的執行環境與手動執行時的執行環境不一樣。
手動執行時,任務的執行環境爲當前用戶或指定用戶的執行環境,典型的執行環境是環境變量,此時環境變量能夠用env查看。Crontab調度時,執行環境的環境變量大爲縮減,以下爲用root用戶執行crontab任務時的環境變量

SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
PWD=/root
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

因此,編碼時,儘可能經過全路徑名引用文件或調用命令,或者將引用的文件或者命令的路徑添加到環境變量中,或者腳本開始處切換一下當前目錄

2.        Crontab任務的輸出重定向文件無寫權限
一般狀況下,在添加crontab任務以前,都會手動執行一下待添加的crontab任務,此時,經過重定向產生的文件,只執行該任務的用戶有寫權限,由sudo -u指定的用戶並無寫權限。本質緣由是sudo –u對重定向符不起做用。如此,在添加crontab任務,以sudo –u中指定的用戶身份運行時,因爲對重定向文件無寫權限,crontab任務會安靜的失敗

3.        Crontab任務配置文件owner不是root
在添加crontab任務時,若是配置文件owner不是root,任務會失敗(志遙之前也提起過),不過這種失敗,能夠在cron日誌中看到以下錯誤信息:

(*system*) WRONG FILE OWNER

4.        Crontab任務配置文件爲單行
Crontab任務都是單行,可若是配在配置文件中,任務字符串後沒有換行符,這個任務就有可能也會靜悄悄地失敗。爲安全起見,建議多一下按下回車鍵

5.        crontab 任務配置文件中的"%"需轉義

建議:寫好的crontab任務,最好用下面的方式手動運行一次,若是能夠成功,放到crontab應該就沒啥問題

env -i sudo -u user cmd

說明:
env -i:忽略全部環境變量
user:將以什麼用戶運行
cmd:cron調度執行的命令
相關文章
相關標籤/搜索