New-Gocron 基于 ouqiang/gocron 二次开发。感谢原作者及社区贡献者提供稳定的任务调度基础。本项目在保留原有 Shell、HTTP、任务依赖、多节点和通知能力的基础上,持续完善管理界面、数据看板、任务操作、登录安全及发布流程。
当前版本为 2.0.5,支持 MySQL 和 PostgreSQL,可通过二进制包部署,也可从源码构建。
- 集中管理 Shell 与 HTTP 定时任务,支持多节点、子任务、失败重试和手动执行。
- 提供任务状态、今日执行趋势、即将执行任务和最近异常的数据看板。
- 支持按任务、标签、节点、执行方式和状态筛选,并可在当前浏览器按用户保存置顶任务。
- 支持邮件、Slack 和企业微信 Webhook 通知,以及关键字、通配符、正则表达式和数值比较规则。
- 提供登录失败审计、按 IP 与账号封禁、后台 IP 白名单和数据库升级工具。
- HTTP 任务支持逐行填写自定义 Header,例如
Authorization: Bearer token。POST Body 使用 JSON,留空不发送请求体;原有 URL 问号后参数作为表单提交的旧任务保持兼容。JSON 模式下 URL 查询参数仍保留在 URL 中。 - 可设置任务到期时间(服务器本地时间),留空表示永久生效。到期后自动暂停调度,并禁止手动执行和子任务触发;已开始的执行及其重试允许结束。后台每分钟检查到期任务,执行前也会校验。
- 可关闭单个任务的执行日志,关闭后不再写入数据库执行记录及输出,但重试、通知和子任务不受影响。程序和节点的运行日志不在此开关范围内。
- 日志可保留 7天、30天、90天、180天、1年或永久。新建任务默认90天,旧任务保持开启日志、永久保留。程序启动及之后每小时分批清理超期的已结束日志,不删除执行中的日志;关闭记录也不会立即删除历史日志。
当前版本还支持任务列表和执行日志自定义显示字段,优化通知选择布局,并修复旧数据库企微群接收字段兼容问题。完整版本记录(含上游 gocron 历史版本概要)请查看 CHANGELOG.md。
以下命令会从 GitHub 获取最新发行版,校验 SHA-256,安装到 /usr/local/gocron,创建 systemd 服务并启动 Web 管理端:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | sudo bash同时安装任务节点:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | sudo bash -s -- --with-node一键安装默认使用受限系统用户 new-gocron 运行 Web 主程序和任务节点。需要系统权限或访问 /root 目录的 Shell 任务,可显式启用 root 节点:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | sudo bash -s -- --with-node --node-root节点运行方式会在后续升级时保持不变。使用 --node-unprivileged 可切回 new-gocron。root 节点可执行任意系统命令,请仅允许可信管理员编辑任务,并通过防火墙限制 5921 端口的访问范围。
仅更新 Web 主程序:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | sudo bash -s -- --upgrade --without-node同时更新 Web 主程序和任务节点:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | sudo bash -s -- --upgrade --with-node将现有任务节点改为 root 并更新:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | sudo bash -s -- --upgrade --with-node --node-root更新默认针对 /usr/local/gocron,并保留 conf/、log/ 和 backups/。更新前的程序和配置会备份到 backups/ 目录。
支持从 gocron 1.5.3 升级到 New-Gocron 2.0.x:脚本会保留旧配置,并在首次启动时执行数据库迁移。使用标准 gocron.service 的旧版会被自动停止和接管;如果旧版由 Supervisor、Docker、宝塔或 nohup 管理,请先停止旧进程再运行更新命令。
指定版本或自定义目录可使用:
curl -fsSL https://raw.githubusercontent.com/caoyek/New-Gocron/main/scripts/install.sh | \
sudo bash -s -- --version v2.0.5 --install-dir /data/new-gocron默认安装目录为 /usr/local/gocron,安装过程记录在 /var/log/new-gocron-install.log。首次启动后访问 http://服务器IP:5920 完成数据库和管理员配置。
从 Releases 下载对应系统的程序包并解压。运行目录至少需要包含以下内容:
gocron
gocron-node
conf/
Windows 程序文件名为 gocron.exe 和 gocron-node.exe。
Linux:
chmod +x gocron
./gocron webWindows:
.\gocron.exe webWeb 服务默认监听 0.0.0.0:5920。可按需指定地址、端口和运行环境:
./gocron web --host 0.0.0.0 --port 5920 --env prod首次部署时访问 http://服务器IP:5920,根据安装页面完成数据库配置。安装后的配置保存在 conf/app.ini。
Shell 任务需要至少一个可用的任务节点。请在实际执行命令的服务器上启动 gocron-node。
Linux:
chmod +x gocron-node
./gocron-nodeWindows:
.\gocron-node.exe任务节点默认监听 0.0.0.0:5921,指定监听地址可使用:
./gocron-node -s 0.0.0.0:5921启动后在 New-Gocron 的“任务节点”页面添加节点地址。
原版 gocron v1.5.3 用户可先阅读完整升级教程,包含备份、替换、迁移、验收和回滚步骤。
New-Gocron 2.0 相对原项目涉及以下数据库字段调整:
| 表 | 字段 | 原类型或异常类型 | New-Gocron 2.0 类型 |
|---|---|---|---|
{prefix}task |
command |
VARCHAR(256) |
TEXT NOT NULL |
{prefix}task_log |
command |
VARCHAR(256) |
TEXT NOT NULL |
{prefix}task |
notify_keyword |
VARCHAR(128) |
TEXT NOT NULL |
{prefix}task |
notify_receiver_id |
部分旧 MySQL 数据库为 INT |
VARCHAR(256) NOT NULL DEFAULT '' |
{prefix}task |
deleted |
部分异常数据库为数值类型 | MySQL DATETIME NULL / PostgreSQL TIMESTAMP NULL |
{prefix}task |
http_headers / http_body |
新增 | TEXT |
{prefix}task |
http_body_mode |
新增 | VARCHAR(16),空值表示兼容表单模式 |
{prefix}task |
expires_at |
新增 | VARCHAR(19),空值表示不过期 |
{prefix}task |
log_disabled |
新增 | 布尔值,默认关闭标记为假 |
{prefix}task |
log_retention_days |
新增 | 整数,默认0表示永久保留 |
上述任务配置字段在启动和 db-upgrade 时自动检查并补齐,不依赖版本标记是否变化。升级前备份数据库,并确保数据库账号具有新增字段权限;任务节点无需因这些配置更新。
MySQL 的通知接收字段会在启动和 db-upgrade 时检查,不依赖 conf/.version 是否已升级;已有更宽的字符串字段不会缩短。迁移保留原接收 ID,将 NULL 转为空字符串。若企微群配置此前已被整数列转换为 0,迁移无法恢复原选择,请重新选择群和模板后保存。生产环境操作前请备份数据库,迁移需要 ALTER、SELECT 和 UPDATE 权限。
登录安全功能还会新增两张表:
| 表 | 用途 |
|---|---|
{prefix}login_security_event |
保存所有登录成功和失败事件 |
{prefix}login_block |
保存 IP 和账号的封禁状态 |
登录安全策略保存在已有的 {prefix}setting 表中,code 为 login_security,key 为 policy。
其中 {prefix} 是 conf/app.ini 中 db.prefix 配置的表前缀。前缀会直接与表名拼接,例如 db.prefix = gocron 对应的任务表为 gocrontask。
推荐按以下顺序升级生产环境:
- 备份当前数据库和
conf/app.ini。 - 停止旧版 Web 服务,避免升级过程中继续写入数据。
- 解压 New-Gocron 2.0.5,并保留原有的
conf/app.ini、conf/install.lock和conf/.version。 - 在 New-Gocron 程序目录执行数据库升级命令。
- 数据库升级成功后再启动 Web 服务和任务节点。
Linux:
./gocron db-upgrade
./gocron webWindows:
.\gocron.exe db-upgrade
.\gocron.exe webdb-upgrade 会读取程序目录中的 conf/app.ini,执行 New-Gocron 2.0 所需的字段调整并创建登录安全数据表,不启动 Web 服务或任务调度。该命令可以重复执行。
正常从旧版本首次启动 New-Gocron 2.0 时也会进入版本迁移流程,但生产环境建议先单独执行 db-upgrade,确认数据库升级成功后再启动服务。
不要在未备份数据库的情况下直接升级,也不要让旧版 Web 服务长期连接已经完成 2.0 字段调整的数据库。
- Go(项目使用 Go Modules)
- Node.js 16.20.2(仓库提供
.node-version,可使用 fnm 切换) - npm 或 Yarn
- MySQL 或 PostgreSQL
克隆项目:
git clone https://github.com/caoyek/New-Gocron.git
cd New-Gocron使用 fnm 准备前端环境:
fnm install
fnm use编译两个程序:
make编译结果位于 bin/:
bin/gocron
bin/gocron-node
编译并以开发模式启动后端和任务节点:
make run也可以分别启动:
./bin/gocron web --env dev
./bin/gocron-node安装依赖并启动开发服务器:
cd web/vue
npm install
npm run dev前端开发地址为 http://localhost:8080,/api 请求会代理到本地后端 http://localhost:5920。
也可以在项目根目录使用 Makefile:
make install-vue
make run-vue运行 Go 测试:
go test ./...在 Windows 本地生成 Linux、Windows amd64 完整发布包:
.\scripts\package-release.ps1 -Version v2.0.5Linux 或 macOS 可使用 Make:
make package VERSION=v2.0.5两个入口都会构建前端、更新内嵌静态资源、运行 Go 测试,并在 dist/ 生成 Windows/Linux 主程序、节点程序和 SHA256SUMS.txt。本地构建只生成文件,不会自动上传 GitHub。
- 推送
main:自动测试并生成 Actions Artifact,不创建 Release。 - 在 Actions 页面手动运行:生成测试 Artifact,不创建 Release。
- 推送
v*标签:自动测试、编译并创建或更新对应的 GitHub Release。
正式发布示例:
git push origin main
git tag v2.0.5
git push origin v2.0.5需要中文发行说明时,在推送标签前新增 docs/releases/v2.0.5.md。工作流会把该文件放在 Release 正文顶部,并在下方追加 GitHub 根据提交和 PR 自动生成的变更记录;未提供该文件时则只使用自动生成内容。
本地和 GitHub 可以同时编译,但正式 Release 的同名资产建议只由 GitHub Actions 上传,避免并发覆盖。
| 服务 | 默认地址 | 用途 |
|---|---|---|
| Web 服务 | 0.0.0.0:5920 |
管理页面和 API |
| 任务节点 | 0.0.0.0:5921 |
接收并执行 Shell 任务,仅允许 Web 主程序服务器访问 |
| 前端开发服务 | localhost:8080 |
Vue 开发与热更新 |
- 主配置文件为
conf/app.ini,不要将生产数据库密码提交到 Git。 - 升级或迁移前必须备份数据库和配置文件。
- 从线上数据库复制数据到开发环境后,应先停用所有任务,避免开发环境误执行线上任务。
- 生产环境必须在云安全组和主机防火墙中将任务节点
5921端口的入站来源限制为 Web 主程序服务器的固定 IP,禁止向0.0.0.0/0开放。同机部署应让任务节点只监听127.0.0.1:5921。 - IP 白名单是任务节点的最低安全前提,但不提供传输加密,也不能防止 Web 主程序服务器失陷后的调用;跨公网通信建议同时启用 TLS。
- 生产环境建议使用进程管理工具托管
gocron web和gocron-node。 - 如果 Web 服务经过 Nginx、Caddy 等反向代理,应在代理或防火墙层同时配置后台 IP 白名单;应用层默认使用 TCP 对端 IP,不信任可伪造的请求头。
请在 New-Gocron Issues 提交问题,并附上版本、操作系统、数据库类型和相关日志。
New-Gocron 基于 ouqiang/gocron 二次开发。原项目的功能说明、架构资料和历史版本记录请查看原项目仓库,本项目不再重复收录。
本项目继续保留原项目的开源许可证和版权声明,具体内容见 LICENSE。


