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