在工作中,經常會碰到每隔多少天/小時/分鐘執行一次指令碼,或某個命令的情況。如果是每隔多少小時,多少分執行一次程式,在crontab中可能比較好實現一些,下面是一些示例及crontab的格式說明:
具體示例:
# 下午6點到早上6點,每隔15分鐘執行一次指令碼
0,15,30,45 18-06 * * * /bin/bash $home/script.sh > /dev/null 2>&1
# 每兩小時,重啟一次服務
* */2 * * * /etc/init.d/apache2 restart
下面是每隔多少分鐘,每隔多少小時,每天/每週/每月/每年的crontab的歸納總結
如果說是每個月的每隔10天來執行某個指令碼的話,同樣可以寫成:
# 每個月的1號,11號,21號,31號,執行http服務重啟
0 0 */10 * * /etc/init.d/apache2 restart
但如果是按自然天數,比如說每27天,執行一次指令碼,這個要如何實現呢? 如果是這種情況,顯然不能通過crontab直接實現,必須迂迴實現。下面是能想到的兩種方法。
【方法一】通過指令碼控制時間來實現
思路:
1) 在指令碼running.sh中設定要執行的次數,這裡假如10次,每次間隔27天,script.sh為要執行的指令碼
2) 然後執行nohup bash running.sh &將其放置在後臺讓其自動執行
【方法二】通過crontab間接實現
思路:1) 每天定時執行running.sh指令碼,再在指令碼running.sh裡面判斷,當間隔時間滿足條件時
2) 執行script.sh指令碼,同時修改上次執行時間,以便於下次執行