在 n8n 的世界里,自动化流程的触发方式多种多样,但最让人纠结的,往往不是那些复杂的 API 调用,而是最基础的“定时任务”。很多新手在搭建工作流时,面对 Cron 节点和 Every 节点,总会陷入选择困难症:这俩到底有啥区别?我该用哪个?
作为 N8N大学 的首席主编,我写过上百个自动化流程,踩过的坑能填平一个太平洋。今天,我就用最“大白话”的方式,带你彻底搞懂这两个节点的区别,让你不再纠结。
核心定义:先搞懂它们是什么
在深入对比之前,我们得先明白这两个节点的本质。
Every 节点(每 X 时间):这是 n8n 中最简单的定时器。它的逻辑非常直白——“每隔一段时间,就触发一次”。比如,每隔 5 分钟,每隔 1 小时。它不关心具体的时间点,只关心时间的间隔。
Cron 节点(Cron 程序):这是基于 Unix 系统的传统定时任务调度器。它的逻辑是“在特定的时间点触发”。比如,每天早上 8 点,每周一的下午 5 点,或者每个月的 1 号零点。它通过一个特定的字符串(Cron 表达式)来精确描述时间规则。
深度解析:两者的核心区别
虽然它们都能实现定时触发,但在实际使用中,差异巨大。笔者总结了三个关键维度:
1. 语法与灵活性
Every 节点:极其简单。你只需要填写一个数字(如 5)并选择单位(分钟、小时、天)。它适合新手,几乎没有学习成本。
Cron 节点:需要你掌握 Cron 表达式。比如 0 8 * * * 代表每天 8 点。虽然门槛稍高,但灵活性极强,可以实现复杂的调度逻辑(如每周三和周五的 14 点)。
2. 精确度与场景
Every 节点:它是从工作流启动的那一刻开始计时的。如果你在 10:05 启动了一个“Every 5 分钟”的工作流,它会在 10:10、10:15 触发。它不保证在整点(如 10:00)触发。
Cron 节点:它严格按照日历时间触发。无论你什么时候启动工作流,只要到了设定的时间点(如每天 00:00),它就会触发。这在需要对齐外部系统(如报表生成、股市开盘)时至关重要。
3. 资源消耗
在 n8n 的执行逻辑中,Every 节点通常被视为一种简单的循环,逻辑轻量。而 Cron 节点由系统底层的调度器管理,理论上更稳定,但配置错误(如每秒触发)可能导致服务器负载飙升。
对比表格:一目了然的选择指南
为了更直观地对比,N8N大学 整理了以下表格:
| 特性 | Every 节点 | Cron 节点 |
|---|---|---|
| 触发逻辑 | 基于时间间隔(Relative) | 基于固定时间点(Absolute) |
| 使用难度 | 极低(填数字即可) | 中等(需懂 Cron 表达式) |
| 适用场景 | 轮询数据、定期检查、简单循环 | 日报生成、整点通知、复杂计划任务 |
| 启动时间影响 | 有影响(从启动时开始计时) | 无影响(按系统时间执行) |
| 灵活性 | 低(只能固定间隔) | 极高(可定义任意复杂规则) |
到底该选哪个?实战决策指南
看完区别,你可能还是有点晕。别急,笔者给你三个实战建议:
场景一:选 Every 节点
如果你的需求是:“每隔 10 分钟去爬取一次网页数据” 或者 “每小时检查一次服务器状态”。
毫不犹豫,选 Every。它简单直接,不需要你去查 Cron 语法,维护成本最低。特别是当你只是想做一个简单的循环测试时,Every 是最佳选择。
场景二:选 Cron 节点
如果你的需求是:“每天早上 9 点给老板发邮件” 或者 “每周五下午 5 点备份数据库”。
必须选 Cron。因为你需要的是“某个特定时间点”的动作,而不是“启动后每隔一段时间”的动作。Cron 能保证即使服务器重启,任务也会在正确的时间点执行。
场景三:混合使用
在复杂的 n8n 工作流中,你甚至可以混合使用。例如,用 Cron 节点在每天 0 点触发主流程,而在主流程内部,使用 Every 节点进行循环处理数据(虽然通常建议用其他方式处理循环)。
避坑指南:新手常犯的错误
在 N8N大学 的社区里,我们见过太多关于这两个节点的报错。以下是你必须注意的细节:
1. 时区问题(Cron 的大坑)
n8n 的 Cron 节点默认使用的是服务器的系统时间(通常是 UTC)。如果你在中国(UTC+8),设置 0 8 * * *,它会在北京时间 16:00 触发(8 + 8 = 16)。
解决方案:在 n8n 的环境变量中设置 GENERIC_TIMEZONE=Asia/Shanghai,或者在 Cron 表达式中手动加减小时数(不推荐)。
2. Every 节点的“启动延迟”
Every 节点通常在工作流保存并激活后才会开始计时,而不是在你保存的那一刻立即执行第一次。
解决方案:如果你需要立即执行一次,可以在工作流中先手动运行一次,或者结合 Webhook 触发一次,然后再交给 Every 节点接管。
FAQ 问答
Q1: Cron 表达式太难记了,有没有工具推荐?
A: 当然有!笔者推荐使用 crontab.guru 这个网站。你可以把英文描述(如 "At 08:00")转为 Cron 表达式,非常直观。
Q2: Every 节点能设置“每秒”触发吗?
A: 可以,但强烈不建议!在 n8n Cloud 或自托管版本中,过于频繁的触发(如每秒)会迅速耗尽内存,导致 n8n 崩溃。除非你的工作流极其轻量且只在本地运行,否则请保持最小间隔为 1 分钟。
Q3: 如果我改了服务器时间,Cron 会受影响吗?
A: 会。Cron 依赖系统时钟。如果你修改了服务器的时区,Cron 节点会立即根据新时间重新调度。这就是为什么建议在环境变量中固定时区,而不是依赖系统设置。
总结与资源
总结一下:Every 节点适合“频率”,Cron 节点适合“时间点”。
如果你追求极简且不在乎整点触发,选 Every;如果你需要精确的计划任务,Cron 是不二之选。在 N8N大学,我们建议新手从 Every 入门,进阶后熟练掌握 Cron,这才是构建稳定自动化系统的基石。
更多资源:
- N8N大学官方文档:n8ndx.com
- n8n 官方节点文档:https://docs.n8n.io/integrations/core-nodes/n8n-nodes-base.cron/