crontab計劃任務無法執行(小結)
阿新 • • 發佈:2017-05-11
crontab
最近在與朋友梳理運維中遇到的坑的時候,發現大家都遇見過crontab計劃任務沒法正常執行的情況,如是簡單的整理下,主要有如下幾種情況:
1、環境變量是否定義
說明:crontab執行shell時,只能識別為數不多的環境變量,所有在腳本中最好使用export重新聲明下該變量
說明:shell腳本rman備份oracle,直接執行腳本中的命令,可以備份,但寫到腳本並放入crontab中,計劃任務就無法執行(後來在腳本中source環境變量),再次執行就OK了
2、腳本是否有可執行權限
說明:對於shell腳本,如果沒有可執行權限的話,最好能夠使用/bin/sh 腳本絕對路徑
3、crontab中無法執行php的解決方法
*/5 * * * * /usr/local/php/bin/php /shells/cron/delete_redis.php >/dev/null 2>&1 檢查發現,php並沒有正常執行,可能是因為php中沒配置絕對路徑 解決方法: */5 * * * * cd /var/www/cron && /usr/local/php/bin/php /shells/cron/delete_redis.php >/dev/null 2>&1
4、crontab下防止腳本運行沖突
CentOS6下(使用lockf或者flock):
*/10 * * * * (/usr/bin/lockf -s -t 0 /tmp/test.lock /usr/local/php/bin/php test.php >/dev/null 2>&1) lockf下參數說明: -k: 一直等待獲取文件鎖 -s:不發出任何信息,即使拿不到文件鎖 -t seconds:設定timeout超時時間是seconds秒,如果超過時間,則自動放棄
CentOS7下(使用flock)
*/10 * * * * root flock -xn /tmp/mytest.lock -c ‘cd /var/www/cron && /usr/local/php/bin/php /shells/cron/delete_redis.php‘>/dev/null 2>&1 這樣當任務未執行完成,下一任務判斷到/tmp/mytest.lock被鎖定,則結束當前的任務,下一周期再判斷。 flock參數說明: -s, --shared: 獲得一個共享鎖 -x, --exclusive: 獲得一個獨占鎖 -u, --unlock: 移除一個鎖,通常是不需要的,腳本執行完會自動丟棄鎖 -n, --nonblock: 如果沒有立即獲得鎖,直接失敗而不是等待 -w, --timeout: 如果沒有立即獲得鎖,等待指定時間 -o, --close: 在運行命令前關閉文件的描述符號。用於如果命令產生子進程時會不受鎖的管控 -c, --command: 在shell中運行一個單獨的命令 -h, --help 顯示幫助 -V, --version: 顯示版本
本文出自 “冰凍vs西瓜” 博客,請務必保留此出處http://molewan.blog.51cto.com/287340/1924382
crontab計劃任務無法執行(小結)