如何使用cron任务每隔2天在固定时间执行任务

简介

通过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天的周期,但没有这种方案更直接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值