You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cron中调度每月第8个工作日执行的任务?

如何在Cron中配置每月第8个工作日执行任务?

Cron本身并没有直接支持“每月第N个工作日”的原生字段逻辑——因为它的日期和星期字段是逻辑或的关系,不是“日期且星期”的判断,直接写日期范围加工作日会导致错误触发(比如每月1-10号的所有工作日都会执行,而不是精准的第8个)。

要实现这个需求,最通用的方法是用Cron触发一个判断脚本,让脚本自动计算当月第8个工作日并匹配当前日期,符合条件时才执行目标任务。下面是具体实现步骤:

步骤1:编写工作日判断脚本

创建一个Shell脚本(比如run_eighth_workday_task.sh),内容如下:

#!/bin/bash

# 1. 获取当前年月格式(如2024-05)
current_month=$(date +%Y-%m)

# 2. 计算当月第8个工作日:
#    - 用cal命令输出当月日历,过滤掉表头和空行
#    - 提取周一到周五的日期(每周前5天)
#    - 取第8条结果就是当月第8个工作日
eighth_workday=$(cal "$current_month" | awk 'NR>2 {for(i=1;i<=7;i++) if($i!="") print $i}' | grep -v '^$' | awk 'NR%7>=1 && NR%7<=5' | sed -n '8p')

# 3. 获取今天的日期(仅日部分,如10)
today=$(date +%d)

# 4. 如果今天是第8个工作日,执行目标命令
if [ "$today" -eq "$eighth_workday" ]; then
    # 替换成你实际要执行的命令
    # 例如:/usr/bin/python3 /path/to/your/task.py
    echo "执行每月第8个工作日的任务:$(date)"
fi

步骤2:配置脚本权限

给脚本添加执行权限,确保Cron能运行它:

chmod +x /path/to/run_eighth_workday_task.sh

步骤3:配置Cron任务

打开Cron编辑界面:

crontab -e

添加以下规则(每天工作日的1:30触发脚本,脚本内部会做精准判断):

30 1 * * 1-5 /path/to/run_eighth_workday_task.sh

补充说明

  • 你提到的参考格式30 1 * 1-12 1 [Command]是每月所有周一的1:30执行任务,和“第8个工作日”的需求不匹配——如果月初有周末,第8个工作日可能不是第2个周一,所以这个格式无法满足需求。
  • 如果需要排除法定节假日,可以扩展脚本:在脚本中维护一个节假日列表,判断今天是否在列表中,再决定是否执行任务。

内容的提问来源于stack exchange,提问作者Suraj Bhandari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:46:47