你是不是也受够了凌晨3点的闹钟?
笔者在做自动化咨询时,见过太多这样的场景:为了抓取早盘数据,设置凌晨2点的闹钟手动运行工作流;为了赶在老板上班前发送日报,半夜起来检查脚本是否跑完。这种“被自动化绑架”的感觉,真的太糟糕了。
本质上,这根本不是自动化,这只是把“手动点击”换成了“人工守时”。真正的自动化,应该像空气一样,你感知不到它的存在,但它无时无刻不在为你工作。
在 N8N大学,我们的目标就是让你彻底告别这种“假自动化”。今天,我们就来硬核拆解 n8n 中负责“定时”的心脏——Schedule 节点。特别是那个让人又爱又恨的 Crontab 表达式,以及那个让无数新手掉坑的“时区”问题。
核心实操:三步搞定“无人值守”
别被“Cron表达式”这四个字吓到,它就是个填空题。我们要做的是在 n8n 中把它用对、用好。
第一步:添加并配置 Schedule 节点
在你的 n8n 工作流中,点击加号,搜索 Schedule。你会发现它有两个模式:Interval(间隔执行) 和 Cron(定时执行)。
如果你只是想“每5分钟跑一次”,选 Interval 最简单。但如果你想实现“每周一到周五的早上9点整执行”,你就必须切换到 Cron 模式。这就是我们今天的主战场。
第二步:看懂 Cron 表达式的“五脏六腑”
点击 Cron 表达式输入框,n8n 会贴心地给出提示。标准的 Cron 格式长这样: * * * * * 。这五个星号分别代表:
- 第一个 *:分钟 (0-59)
- 第二个 *:小时 (0-23)
- 第三个 *:日期 (1-31)
- 第四个 *:月份 (1-12)
- 第五个 *:星期 (0-7,0和7都代表周日)
笔者的实战笔记: 想要“工作日早上9点”?填
0 9 * * 1-5。
想要“每月1号的凌晨1点”?填0 1 1 * *。
想要“每分钟都跑”?填* * * * *。
第三步:最重要的一步——时区(Timezone)设置
这是无数人踩坑的地方。如果你不设置时区,Schedule 节点默认使用的是 n8n 服务器所在的时区(通常是 UTC)。
想象一下,你在北京时间(UTC+8)早上 9:00 打开电脑,却发现工作流还没跑,因为它以为现在是凌晨 1:00。这种时差让人抓狂。所以,务必在“Options”里找到“Timezone”,手动输入 Asia/Shanghai 或者选择你所在的城市。这一步不填,前面的 Cron 配置得再准也是白搭。
避坑指南:时区与“闰年”陷阱
配置好了?别急,先看完这两个坑,能帮你省下两小时的排查时间。
坑一:Docker 部署的“隐形时区”
如果你是通过 Docker 部署的 n8n,即便你在 UI 里选了时区,有时容器内部的时间还是 UTC。最稳妥的做法是,在运行容器时就把时区挂载进去。
在你的 docker run 命令或者 docker-compose.yml 中,添加环境变量:
-e TZ=Asia/Shanghai
或者挂载本地时间:
-v /etc/localtime:/etc/localtime:ro
这样能保证从系统层到应用层,时间完全一致。
坑二:日期与星期的“冲突逻辑”
Cron 的逻辑是“或”而不是“与”。如果你设置日期为 1(1号),星期为 1(周一),那么只要满足“1号”或者“周一”其中任意一个条件,任务就会执行。
如果你的需求是“既是1号又是周一”才执行,Cron 原生是不支持的。这种复杂的逻辑,建议在 Schedule 节点后加一个 If 节点,判断当前的日期和星期几,手动进行二次校验。
FAQ 问答
Q1: 我的 Schedule 节点明明配置了,为什么没按时触发?
A: 首先检查 Timezone 是否设置正确。其次,检查你是否开启了“Active”开关。很多新手配置完工作流,忘了把开关拨到“Active”状态,导致工作流处于未激活状态。
Q2: Cron 表达式里的星期和日期,可以同时指定吗?
A: 上文提到了,原生 Cron 是“或”逻辑。如果需要“且”逻辑(例如:每个月的1号且必须是周一),建议使用 Schedule 节点触发后,用 If 节点进行条件判断。
Q3: Schedule 节点能实现“每隔3小时,但不是整点,而是15分执行”吗?
A: 可以。使用 Cron 模式,分钟填 15,小时填 */3。意思是:在 0:15, 3:15, 6:15... 这样的时间点触发。
总结与资源
配置好 Schedule 节点,你的 n8n 才真正具备了 7x24 小时为你服务的能力。记住,时区设置是灵魂,Cron 表达式是骨架。
在 N8N大学 (n8ndx.com),我们不讲虚的,只给你能落地的实战经验。如果你在配置过程中遇到了更诡异的报错,欢迎在评论区留言,笔者会亲自回复。下期我们聊聊“Webhook 节点如何防黑产”,记得关注。