如何编写每月第13个工作日9点执行的Crontab表达式?
解决Crontab每月第13个工作日执行任务的问题
你之前用的0 9 13 * 1-5逻辑是每月13号且当天为周一至周五时执行,这和“每月第13个工作日”完全不是一回事——第13个工作日是指当月累计的第13个周一到周五,日期不固定(比如当月1号是周日的话,第13个工作日可能是19号)。
Crontab本身没有原生语法支持“第N个工作日”的判断,必须配合脚本实现,步骤如下:
1. 编写工作日判断脚本
创建一个Shell脚本(比如命名为check_13th_workday.sh),用来统计当天是否是当月第13个工作日:
#!/bin/bash # 获取当前年月和当月第几天 current_year_month=$(date +%Y-%m) current_day=$(date +%d) # 统计从当月1号到今天的工作日总数 workday_count=0 for day in $(seq 1 $current_day); do day_of_week=$(date -d "$current_year_month-$day" +%w) # 周一到周五对应1-5,排除周日(0)和周六(6) if [ $day_of_week -ge 1 ] && [ $day_of_week -le 5 ]; then ((workday_count++)) fi done # 若当天是第13个工作日,执行目标任务 if [ $workday_count -eq 13 ]; then # 替换成你实际要执行的命令 # /path/to/your/task.sh echo "执行每月第13个工作日的任务" fi
2. 赋予脚本执行权限
运行命令给脚本添加可执行权限:
chmod +x /path/to/check_13th_workday.sh
3. 配置Crontab定时任务
编辑Crontab:
crontab -e
添加以下规则,让脚本每天上午9点自动执行:
0 9 * * * /path/to/check_13th_workday.sh
保存退出后,Crontab会每天9点触发脚本,脚本内部会自动判断当天是否是当月第13个工作日,符合条件才执行你的目标任务。
内容的提问来源于stack exchange,提问作者dsp
相关产品推荐
相关产品推荐

