📢 Release 1.0.0-beta.11(2026-06-03)现已推出
Arcadia

运行代码文件

运行代码

控制面板中的运行代码文件功能基于调用该命令实现

✍在本篇内容中你将学习到如何运行代码文件这一基础功能。看上去内容很多?其实非常简单。

需要特别说明的是,代码文件是各编程语言程序文件的统称,并非所有代码文件都属于脚本类型。

$ arcadia run
 Arcadia CLI - 运行代码文件

  使用方法:

    arcadia run <name/path/url> [--options]

  命令选项:

    -l, --loop                  循环运行 - 连续多次的执行代码文件,选项后需跟循环次数
    -s, --silent                静默运行 - 不推送任何通知消息
    -w, --wait                  推迟执行 - 等待指定时间后再运行任务,选项后需跟时间值
    -D, --delay                 延迟执行 - 随机倒数一定秒数后再执行代码文件
    -a, --agent                 网络代理 - JavaScript TypeScript 代码文件启用全局 HTTP/HTTPS 代理,配置方法详见文档
    -T, --timeout               运行超时 - 设置运行任务超时机制,选项后需跟 timeout 指令的参数作为选项值
    -N, --no-log                禁用日志 - 不记录代码运行日志
    -p, --proxy                 启用下载代理 - 仅适用于执行位于 GitHub 仓库的代码文件,代理固定为 jsDelivr CDN
    -c, --concurrent            并发运行 - 默认运行1个任务,若想增加运行任务数量那么请传参任务数量
    -t, --thread                并发线程数 - 指定同时运行的最大任务数量,选项后需跟正整数,需与并发运行同时使用
    -b, --background            后台运行 - 不在前台输出代码执行进度,不占用终端命令行
    -r, --recombine-env         变量重组 - 按照指定顺序重新组合复合变量的值,选项后需跟变量名称、分隔符、重组表达式
                                        表达式语法:多个值用 "," 隔开,值区间用 "-" 连接,可以用 "%" 表示值的总数
    -R, --recombine-env-group   分组运行 - 为每组变量单独运行,是变量重组的扩展,传参基本一致,其中重组表达式内用 "@" 来区分不同组
    -S, --split-env             拆分运行 - 将复合变量的值拆分后为每个值声明变量并单独运行代码文件,选项后需跟需要拆分的变量名称、分隔符

    -E, --exec-args             执行参数 - 将该选项后面的内容作为参数传递给代码执行器
    --                          传递选项 - 将该选项后面的所有内容都作为选项参数传递给代码文件

    --deno,--use-deno          使用 Deno 运行时
    --bun,--use-bun            使用 Bun 运行时
    --node,--use-node          使用 Node.js 运行时
    --tsx,--use-tsx            使用 tsx 执行
    --ts-node,--use-ts-node    使用 ts-node 执行

    沙箱:

    --sandbox                                 沙箱模式,在受限环境中运行代码,隔离网络、文件系统和内存
    --sandbox-net-allow <spec>                出站白名单,仅放行匹配规则的出站连接(指定后取代默认全量联网),可多次使用
    --sandbox-net-deny <spec>                 出站黑名单,仅屏蔽匹配规则的出站连接(默认联网不变),可多次使用,与 --sandbox-net-allow 互斥
    --sandbox-net-deny-all                    完全断网,阻断所有出站网络连接
    --sandbox-net-deny-local                  屏蔽局域网,阻断本地回环、私网网段及云元数据地址,可与 --sandbox-net-deny 叠加
    --sandbox-net-allow-bind <port>           允许绑定指定端口,放行指定 TCP 端口的服务端绑定监听(与出站控制独立),可多次使用
    --sandbox-net-allow-bind-all              允许绑定任意端口,放行所有 TCP 端口绑定监听,与 --sandbox-net-allow-bind 互斥
    --sandbox-http-allow <rule>               HTTP 请求白名单,仅放行匹配的 HTTP/HTTPS 请求(格式:"METHOD host/path"),可多次使用,与 --sandbox-http-deny 互斥
    --sandbox-http-deny <rule>                HTTP 请求黑名单,屏蔽匹配的 HTTP/HTTPS 请求(格式:"METHOD host/path"),可多次使用,与 --sandbox-http-allow 互斥
    --sandbox-max-memory <size>               内存上限,限制进程最大内存用量(例如 512M、1G)
    --sandbox-clear-env                       清空环境变量,移除所有继承的环境变量(仅保留最小系统路径)
    --sandbox-env KEY=VALUE                   注入环境变量,向进程追加自定义环境变量,可多次使用
    --sandbox-allow-env-whitelist VAR1,VAR2   环境变量白名单,仅保留指定变量(隐式启用清空),与 --sandbox-clear-env 互斥
    --sandbox-allow-env-blacklist VAR1,VAR2   环境变量黑名单,排除指定变量(其余正常继承)
    --sandbox-allow-read <path>               允许只读访问,在预设挂载之外追加只读目录,可多次使用
    --sandbox-allow-write <path>              允许读写访问,在预设挂载之外追加读写目录,可多次使用
    --sandbox-opts <args>                     透传底层参数,将原始参数直接传递给 sandlock(选项名与值写在同一字符串内),可多次使用

  命令帮助:

    <name> 文件名(仅scripts目录)  <path> 相对路径或绝对路径  <url> 链接地址  [--options] 命令选项

使用方法

arcadia run <name/path/url> [--options]

文件名称 name

仅限 scripts 个人目录下的代码文件,并且仅涵盖 根目录,你可以把你常用的代码文件(脚本)存放在这里

路径 path

相对路径或绝对路径,支持使用 ../ 作为当前目录和用 ../ 作为上级目录,如果运行本地的个人代码文件则可以省略路径
如果运行的是已配置的代码仓库中的代码文件可以使用相对路径,例如 /arcadia/repo/<仓库目录名称>/example.js 可以使用 repo/example.js 替代

链接地址 <url>

运行后代码文件默认保存在 scripts 个人目录,支持链接自动纠正功能
链接自动纠正功能是当拉取位于远程托管仓库的代码文件时可自动将 blob 链接转换为 raw 原始文件链接,此功能已应用到整个项目

命令选项 [--options]

用于实现一些扩展功能,具体请查看下方的文档内容


基础概念


命令选项

使用方法:追加在命令的末尾,熟练后可以使用简写

一个高级的应用程序CLI指令往往有着复杂的命令选项设计,这可能是一个漫长的学习过程~

选项用途选项值描述
-l, --loop循环运行连续多次运行代码文件,选项后需跟 循环次数(正整数),该选项与 等待执行延迟执行 参数同时使用时仍然有效互不干涉
-s, --silent静默运行静默运行任务不推送任何通知消息
-w, --wait推迟执行等待指定时间后再运行代码文件,选项后需跟 等待时间单位 作为参数值,具体参照 sleep 命令的用法
-D, --delay延迟执行随机倒数一定秒数后再运行代码文件,该秒数上限可以在配置文件中定义
-a, --agent网络代理为 JavaScript 和 TypeScript 代码文件启用全局 HTTP/HTTPS 代理,使用方法详见下方说明
-T, --timeout运行超时设置运行任务超时机制,选项后需跟 timeout 指令的参数作为选项值
-N, --no-log禁用日志不记录代码运行日志
-p, --proxy启用下载代理仅适用于执行位于 GitHub 仓库的代码文件,该代理固定为 jsDelivr 公共 CDN 加速代理
-c, --concurrent并发运行默认运行1个任务,若想增加运行任务数量那么请传参 任务数量(正整数)
-t, --thread指定并发线程指定同时运行的最大任务数量,选项后需跟正整数,需与并发运行同时使用
-b, --background后台运行不在前台输出代码执行进度,不占用终端命令行
-r, --recombine-env变量重组按照指定顺序重新组合复合变量的成员值,选项后需跟变量名称、分隔符、重组表达式。表达式语法:多个值用 , 隔开,值区间用 - 连接,可以用 % 表示值的总数
-R, --recombine-env-group分组运行基于变量重组功能上的扩展应用,为每组变量单独运行代码文件,传参与变量重组功能基本一致,其中重组表达式内用 @ 来区分不同组
-S, --split-env拆分运行将复合变量的成员值拆分后为每个值声明变量并单独运行代码文件,选项后需跟需要拆分的变量名称、分隔符
-E, --exec-args执行参数将该选项后面的内容作为参数传递给代码执行器
--传递选项将该选项后面的所有内容都作为选项参数传递给代码文件
--deno, --use-denoDeno使用 Deno 运行时
--bun, --use-bunBun使用 Bun 运行时
--node, --use-nodeNode.js使用 Node.js 运行时
--tsx, --use-tsxTypeScript Execute (tsx)使用 tsx 执行
--ts-node, --use-ts-nodets-node使用 ts-node 执行

终止运行

终止运行中的代码程序(脚本)
arcadia stop <name/path>

终止某个或某些正在运行中的代码程序,根据代码文件名称搜索对应的进程并立即杀死,支持终止多进程任务

<name> 文件名(仅scripts目录) <path> 相对路径或绝对路径


守护进程

什么是守护进程?

守护进程是可以周期运行的特殊进程,在这里指的是将代码文件设置为后台进程循环运行,当代码文件运行结束或中断时会自动重新运行,适用于需要长期连续运行的代码文件。
针对同一个代码文件只可存在一个守护进程,这就意味着当即将被运行的代码文件存在多个任务时不允许设置守护进程。

使用提示

该命令目前仅用于任务启动,请优先通过控制面板进行持久化管理,否则手动在终端命令行启动的任务将无法在控制面板中显示。

守护进程模式使用独立的 rund 子命令,通过 PM2 将代码文件保持在后台持续运行,进程退出或崩溃后会自动重新拉起。

$ arcadia run
 Arcadia CLI - 运行代码文件(守护进程)

  使用方法:

    arcadia rund <name/path> [--options]

  专属命令选项:

    --name                          指定任务名称
    --max-restarts                  指定最大重启次数
    --restart-delay                 指定重启延迟毫秒数
    --log-file                      指定日志文件路径
    --restart-cron                  指定重启计划任务
    --no-autorestart                禁用进程崩溃后的自动重启
    --max-memory-restart            内存超出指定值时自动重启(例如 200M)
    --stop-exit-codes               指定不触发自动重启的退出码
    --exp-backoff-restart-delay     启用指数退避重启,指定初始延迟毫秒数

  通用命令选项:

    -s, --silent                静默运行 - 不推送任何通知消息
    -a, --agent                 网络代理 - JavaScript TypeScript 代码文件启用全局 HTTP/HTTPS 代理,配置方法详见文档
    -r, --recombine-env         变量重组 - 按照指定顺序重新组合复合变量的值,选项后需跟变量名称、分隔符、重组表达式
                                           表达式语法:多个值用 "," 隔开,值区间用 "-" 连接,可以用 "%" 表示值的总数

    -E, --exec-args             执行参数 - 将该选项后面的内容作为参数传递给代码执行器
    --                          传递选项,将该选项后面的所有内容都作为选项参数传递给代码文件

    --deno,--use-deno          使用 Deno 运行时
    --bun,--use-bun            使用 Bun 运行时
    --node,--use-node          使用 Node.js 运行时
    --tsx,--use-tsx            使用 tsx 执行
    --ts-node,--use-ts-node    使用 ts-node 执行

  命令帮助:

    <name> 文件名(仅scripts目录)  <path> 相对路径或绝对路径  [--options] 命令选项

支持部分通用命令选项,同时提供下列守护进程专属命令选项

选项选项值描述
--name指定 PM2 进程名称,默认使用代码文件名
--max-restarts最大自动重启次数(非负整数),默认无限制
--restart-delay崩溃后重启延迟毫秒数(非负整数),默认 0
--log-file日志文件完整路径,未指定时使用项目默认日志目录
--restart-cron定时重启 Cron 表达式,为空则不启用
--no-autorestart禁用崩溃自动重启,进程退出后不再重新拉起
--max-memory-restart内存超限自动重启阈值(如 200M),默认不启用
--stop-exit-codes遇到指定退出码时停止重启(非负整数,如 0
--exp-backoff-restart-delay启用指数退避重启策略,指定初始延迟毫秒数(非负整数)

管理方法

  • 查看有哪些守护进程正在运行 pm2 list
  • 停止运行 pm2 stop <任务名>
  • 删除任务 pm2 delete <任务名>

默认存在二个项目内置的服务 arcadia_server tgbot,请不要删除它们其中的任何一个


沙箱(BETA)

arcadia run <name/path/url> --sandbox

什么是沙箱?

沙箱是将代码进程关入一个独立运行环境内执行的能力。启用后,代码只能访问它自己的文件目录和必要的系统运行库,无法读取其它目录中的文件,也无法影响其它进程。这尤其适合运行来自不可信来源的代码文件时使用。

此功能基于 sandlock 实现,通过 Linux Landlock LSM 和 seccomp-bpf 提供文件系统隔离与网络控制。

手动安装命令

安装命令
wget -O /arcadia/src/shell/sandbox/sandlock.tar.gz https://github.com/multikernel/sandlock/releases/download/v0.7.0/sandlock-$(arch)-unknown-linux-gnu.tar.gz
tar -xzf /arcadia/src/shell/sandbox/sandlock.tar.gz
rm -rf /arcadia/src/shell/sandbox/sandlock.tar.gz
chmod a+x /arcadia/src/shell/sandbox/sandlock

命令兼容性

终止运行命令 arcadia stop 在沙箱模式下仍然可用,不支持守护进程 arcadia rund 模式。

预设配置

启用沙箱功能后,代码进程将按以下预设配置运行,这是沙箱的基准隔离状态,可通过下方的自定义配置选项进一步调整:

  • 文件系统:仅可读写自身所在目录,可读取系统运行库,其它所有目录均不可见
  • 网络:与宿主共享网络,允许完整网络访问
  • 环境变量:全量继承当前运行环境的所有变量,与正常运行一致
  • 进程可见性:代码进程只能看到沙箱内部的进程,无法查看或影响宿主上的其它进程

自定义配置项

以下选项均需配合 --sandbox 使用,用于在预设配置基础上进行自定义调整。

选项选项值描述
--sandbox-net-allow出站白名单,仅放行匹配规则的出站连接(指定后取代默认全量联网),可多次使用,与其余网络选项互斥
--sandbox-net-deny出站黑名单,仅屏蔽匹配规则的出站连接(默认联网不变),可多次使用,可与 --sandbox-net-deny-local 叠加,与 --sandbox-net-allow--sandbox-net-deny-all 互斥
--sandbox-net-deny-all完全断网,阻断所有出站网络连接,与其余网络选项互斥
--sandbox-net-deny-local屏蔽局域网,阻断本地回环、私网网段及云元数据地址(169.254.169.254),可与 --sandbox-net-deny 叠加,与 --sandbox-net-allow--sandbox-net-deny-all 互斥
--sandbox-net-allow-bind允许绑定指定端口,放行指定 TCP 端口的服务端绑定监听(与出站控制独立),可多次使用
--sandbox-net-allow-bind-all允许绑定任意端口,放行所有 TCP 端口绑定监听,与 --sandbox-net-allow-bind 互斥
--sandbox-http-allowHTTP 请求白名单,仅放行匹配的 HTTP/HTTPS 请求(格式:"METHOD host/path"),可多次使用,与 --sandbox-http-deny 互斥
--sandbox-http-allowHTTP 请求白名单,仅放行匹配的 HTTP/HTTPS 请求(格式:"METHOD host/path"),可多次使用,与 --sandbox-http-deny 互斥
--sandbox-max-memory内存上限,限制进程最大内存用量,支持 M(兆字节)和 G(吉字节)单位
--sandbox-clear-env清空环境变量,移除所有继承的环境变量(仅保留最小系统路径),可配合 --sandbox-env 补充注入
--sandbox-env注入环境变量,向进程追加自定义环境变量(KEY=VALUE),可多次使用
--sandbox-allow-env-whitelist环境变量白名单,仅保留逗号分隔的指定变量(隐式启用清空),与 --sandbox-clear-env 互斥
--sandbox-allow-env-blacklist环境变量黑名单,排除逗号分隔的指定变量(其余正常继承),与 --sandbox-clear-env--sandbox-allow-env-whitelist 互斥
--sandbox-allow-read允许只读访问,在预设挂载之外追加只读目录,可多次使用
--sandbox-allow-write允许读写访问,在预设挂载之外追加读写目录,可多次使用
--sandbox-opts透传底层参数,将原始参数直接传递给 sandlock(选项名与值写在同一字符串内),可多次使用

使用示例