如何使用cron任務每隔2天在固定時間執行任務

劉近光發表於2018-10-11

簡介

通過crontab 命令,我們可以在固定的間隔時間執行指定的系統指令或 shell script指令碼。本文將介紹crontab的一個特殊應用需求,如何通過crontab來每隔2天在固定時間執行任務。

crontab時間說明

# .---------------- minute (0 - 59) 
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... 
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)  OR
#sun,mon,tue,wed,thu,fri,sat 
# |  |  |  |  |
# *  *  *  *  *  command to be executed

minute:代表一小時內的第幾分,範圍 0-59。
hour:代表一天中的第幾小時,範圍 0-23。
mday:代表一個月中的第幾天,範圍 1-31。
month:代表一年中第幾個月,範圍 1-12。
wday:代表星期幾,範圍 0-7 (0及7都是星期天)。
who:要使用什麼身份執行該指令,當您使用 crontab -e 時,不必加此欄位。
command:所要執行的指令。

解決方案

根據上面對crontab時間格式的說明,比較直觀的解決方案是對日期整除2來實現此方案:

15 0 */2 * * insert_your_script_here.sh

上面的需求貌似解決了每隔2天在凌晨15分時執行固定的任務。但實際上有些月份有31天,導致本月31號和下月1號,都會執行此操作,並沒有真正實現每隔兩天週期來執行任務。

crontab並沒有提供這個需求的直接支援,但細思這個需求,結合crontab支援每天執行固定操作,需要做的就是跳過一天不進行操作,那麼是否可以通過記錄一個標誌來實現當前操作是否需要真正執行任務呢?答案是可以的,可以通過在/tmp目錄下標記檔案的方式來實現:

if [ -f /tmp/altday ];then
    rm /tmp/altday
    exit 0
else
    touch /tmp/altday
    insert_your_script_here.sh
fi

當然也可以記錄時間,來檢查是否經過了2天的週期,但沒有這種方案更直接。

相關文章