一、每奇数周的周一执行
16 0 * * 1 [ $(($(date +\%W) \% 2)) -eq 1 ] > /dev/null && sh /data1/test.sh
具体地:
1. 分钟字段(Minute field):`16`
2. 小时字段(Hour field):`0`
3. 日期字段(Day of the month field):`*`
这表示任何日期都匹配,不限制特定的日期。
4. 月份字段(Month field):`*`
这表示任何月份都匹配,不限制特定的月份。
5. 星期字段(Day of the week field):`1`
以上 【16 0 * * 1】 这表示任务将在星期一、0点16分执行执行。
6. 命令(Command):[ $(($(date +\%W) \% 2)) -eq 1 ] && your_command
首先使用了`date +\%W`命令来获取当前周数,并通过模运算(`% 2`)判断是否为奇数周。如果是奇数周,则返回值为1,命令将继续执行。接下来,使用条件运算符(`&&`)连接你自己的命令`your_command`,以便在满足条件时执行。
因此,该Crontab语句会在每周一的0点16分执行命令,并且只会在奇数周时才真正执行你指定的命令。
二、每偶数周的周一执行
偶数周执行只需要将 -eq 1 换为 -eq 0 即可。
16 0 * * 1 [ $(($(date +\%W) \% 2)) -eq 0 ] > /dev/null && sh /data1/test.sh
备注:Crontab中%有其指定含义因此使用时需要加转义 \