任务运行器#
任务运行器是一种以安全和高性能方式执行任务的通用机制。它们用于在 Code 节点 中执行用户提供的 JavaScript 代码。
本文档描述了任务运行器的工作原理以及如何配置它们。
工作原理#
任务运行器功能由三个组件组成:任务运行器、任务代理和任务请求者。
任务运行器使用 websocket 连接连接到任务代理。任务请求者向代理提交任务请求,可用的任务运行器可以获取并执行该任务。
运行器执行任务并将结果提交给任务请求者。任务代理协调运行器和请求者之间的通信。
n8n 实例(主实例和工作实例)充当代理。在这种情况下,Code 节点是任务请求者。
任务运行器模式#
您可以在两种不同模式下使用任务运行器:内部模式和外部模式。
内部模式#
在内部模式下,n8n 实例将任务运行器作为子进程启动。n8n 进程监视和管理任务运行器的生命周期。任务运行器进程与 n8n 共享相同的 uid
和 gid
。
外部模式#
在外部模式下,外部编排器(例如 Kubernetes)代替 n8n 启动任务运行器。通常,这意味着您会将任务运行器配置为在 n8n 旁边作为辅助容器运行。
在此模式下,编排器监视和管理任务运行器容器的生命周期。任务运行器与 n8n 实例完全隔离。
使用队列模式时,每个 n8n 容器(主容器和工作容器)都需要有自己的任务运行器。
设置外部模式#
使用以下详细信息在外部模式下配置任务运行器
在外部模式下配置 n8n 实例#
您可以通过设置以下环境变量来配置 n8n 使用外部任务运行器:
环境变量 | 描述 |
---|---|
N8N_RUNNERS_ENABLED=true |
启用任务运行器。 |
N8N_RUNNERS_MODE=external |
在外部模式下使用任务运行器。 |
N8N_RUNNERS_AUTH_TOKEN=<random secure shared secret> |
任务运行器用于连接到代理的共享密钥。 |
N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 |
默认情况下,任务代理只监听 localhost。使用多个容器时(例如,使用 Docker Compose),它需要能够接受外部连接。 |
有关环境变量的完整列表,请参阅任务运行器环境变量。
在外部模式下配置任务运行器#
任务运行器与 n8n Docker 镜像捆绑在一起。Docker 镜像还包括任务运行器启动器。
启动器可以按需启动运行器,这意味着在不需要工作时内存使用较低,但冷启动会有短暂延迟(几百毫秒)。启动器还会监控运行器,并在出现无限循环或其他问题时重新启动它。
通过设置以下属性从 n8n Docker 镜像运行任务运行器容器:
配置 | 描述 |
---|---|
command |
["/usr/local/bin/task-runner-launcher", "javascript"] |
livenessProbe |
GET /healthz , port 5680 |
为容器设置以下环境变量,调整以适合您的需求:
环境变量 | 描述 |
---|---|
N8N_RUNNERS_AUTH_TOKEN=<random secure shared secret> |
任务运行器用于连接到代理的共享密钥。 |
N8N_RUNNERS_MAX_CONCURRENCY=5 |
运行器可以执行的并发任务数量。 |
N8N_RUNNERS_TASK_BROKER_URI=localhost:5679 |
n8n 实例内任务代理服务器的地址。 |
N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15 |
在关闭任务运行器进程之前等待不活动的秒数。当有新任务要执行时,启动器将自动再次启动运行器。设置为 0 以禁用自动关闭。 |
NODE_OPTIONS=--max-old-space-size=<limit> |
任务运行器 Node.js 进程的内存限制。这应该低于容器的限制,以便运行器在容器之前耗尽内存。这样,启动器就能够监控运行器。 |
GENERIC_TIMEZONE |
为 n8n 实例配置的相同默认时区。 |
有关环境变量的完整列表,请参阅任务运行器环境变量。
🚀 与作者交流

📚 教程 💡 案例 🔧 技巧

⚡ 快答 🎯 定制 🚀 支持