Linux cron 任務 不執行/cron 任務詳解
1. cron任務不執行:
hostname cron.d]$ sudo crond reload
crond: can't lock /var/run/crond.pid, otherpid may be 20585: Resource temporarily unavailable
(1). pgrep crond 檢視當前時刻正在執行的corn任務
[[email protected] cron.d]$ pgrep crond
20585
22298
pgrep 應該是查詢 程序pid的命令說明可能兩個cron任務同時執行;
(2). check cron任務的:
sudo tail -f /var/log/cron [[email protected] pat]$ sudo tail /var/log/cron Aug 21 19:26:01 crond[666]: (root) CMD (/home/a/bin/kfc_gather -p 2905 -g tanx_gae > /dev/null 2>&1) Aug 21 19:26:01 crond[671]: (root) CMD (/home/a/bin/kfc_gather -p 2905 -g xengine > /dev/null 2>&1) Aug 21 19:26:01 crond[674]: (root) CMD (/home/a/bin/kfc_gather -p 2905 -g adpost > /dev/null 2>&1) Aug 21 19:26:01 crond[676]: (root) CMD (chmod o+r /opt/csr/tair/sbin/logs/server.log) Aug 21 19:26:01 crond[679]: (timetunnel) CMD (/home/timetunnel/logcenter/logagent/runLogAgent.sh >/dev/null 2>&1) Aug 21 19:27:01 crond[865]: (root) CMD (chmod o+r /opt/csr/tair/sbin/logs/server.log)
注:只要在這個log裡面出現的命令就說明cron任務執行了
(3). 重啟cron任務sudo /etc/init.d/crond restart
/sbin/service crond stop
/sbin/service crond start
sudo service crond stop/start
2. 查詢問題:
/home/a/bin/kfc_gather -p 2905 -g adpost sudo /home/a/bin/kfc_gather -p 2905 -g adpost strace -s 10000 -f -o /tmp/t /home/a/bin/kfc_gather -p 2905 -g adpost vim /tmp/t kfcstat localhost 2905 1 strace -s 10000 -o /tmp/t -f kfcstat localhost 2905 1 strace -s 數量 -o 輸出檔案 後面是一個命令;則會把後面的命令答應到stdout,但把命令在程序的所有資訊輸出到檔案中;通過查檔案來看命令都做了什麼事情
3. crontab 任務不執行,首先要查詢一下cron任務的宿主和語法:
(1). /etc/cron.d/cron_zengtai 這個檔案必須是 root:root 否則cron_zengtai 不會執行
(2). cron的語法,如果語法錯誤也不會執行:
* * * * *
----具體cron任務沒有執行,sudo tail -f /var/log/cron
4. cron 指令碼是從別的機器複製的則 scp -p [email protected]:/etc/cron.d/test_cron
則這個cron任務的時間屬性不變,這個cron任務有可能不執行;需要我們touch一下
sudo touch ../cron
5. cron 任務:
這段時間的運維過程中,發現了幾個crontab使用雷區。
(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).1 cron會忽略點系統的i18n,預設使用posix的來decode,導致awk識別錯誤
2 crontab file “%”要轉義