linux定時任務的一些操作與坑

雖然linux定時任務很簡單,但是用起來還是有一些坑的,現在我從頭開始講講怎麼解決這些坑。

一、使用姿勢(來自於某個網站)

crontab的命令構成爲 時間+動作,其時間有分、時、日、月、周五種,操作符有

  • * 取值範圍內的所有數字
  • / 每過多少個數字
  • - 從X到Z
  • 散列數字

實例

實例1:每1分鐘執行一次myCommand

* * * * * myCommand

實例2:每小時的第3和第15分鐘執行

3,15 * * * * myCommand

實例3:在上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * * myCommand

實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行

3,15 8-11 */2  *  * myCommand

實例5:每週一上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * 1 myCommand

實例6:每晚的21:30重啓smb

30 21 * * * /etc/init.d/smb restart

實例7:每月1、10、22日的4 : 45重啓smb

45 4 1,10,22 * * /etc/init.d/smb restart

實例8:每週六、週日的1 : 10重啓smb

10 1 * * 6,0 /etc/init.d/smb restart

實例9:每天18 : 00至23 : 00之間每隔30分鐘重啓smb

0,30 18-23 * * * /etc/init.d/smb restart

實例10:每星期六的晚上11 : 00 pm重啓smb

0 23 * * 6 /etc/init.d/smb restart

實例11:每一小時重啓smb

* */1 * * * /etc/init.d/smb restart

實例12:晚上11點到早上7點之間,每隔一小時重啓smb

* 23-7/1 * * * /etc/init.d/smb restart

二、一些不爲人知的坑

  • vi /etc/crontab 和crontab -e 是完全不一致的,vi /etc/crontab必須需要指定用戶來執行,vi /etc/crontab 需要用下面方法執行如:*/5 * * * * root php xxxxxx >/dev/null 2>&1
# Minute   Hour Day of Month     Month          Day of Week     Who   Command    
# (0-59)  (0-23)   (1-31)  (1-12 or Jan-Dec)  (0-6 or Sun-Sat)  root  /my/fancy/script.sh
  • 新創建的cron job,不會馬上執行,至少要過2分鐘才執行。如果重啓cron則馬上執行。
  • 每條 JOB 執行完畢之後,系統會自動將輸出發送郵件給當前系統用戶。日積月累,非常的多,甚至會撐爆整個系統。所以每條 JOB 命令後面進行重定向處理是非常必要的: >/dev/null 2>&1 。前提是對 Job 中的命令需要正常輸出已經作了一定的處理, 比如追加到某個特定日誌文件。
  • 當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者查看日誌看某個job有沒有執行/報錯tail -f /var/log/cron。
  • 千萬別亂運行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的所有crontab都沒了。
  • 在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義\%,如經常用的date ‘+%Y%m%d’在crontab裏是不會執行的,應該換成date ‘+\%Y\%m\%d’`

 

三、cli可以執行,但定時任務不執行,還有一個很重要的是環境變量的原因

解決方法:

需要在定時任務中加入

30 01 * * * apache source /etc/profile; php xxxxxx >/dev/null 2>&1

原因:

crontab與環境變量
不要假定cron知道所需要的特殊環境,它其實並不知道。所以你要保證在shelll腳本中提供所有必要的路徑和環境變量,除了一些自動設置的全局變量。所以注意如下3點:
1)腳本中涉及文件路徑時寫全局路徑;
2)腳本執行要用到php或其他環境變量時,在腳本中引入通過source命令引入環境變量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &

參考:

https://www.cnblogs.com/Dev0ps/p/9233599.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章