whyour
ef348b445b
fix: synchronize runtime locales and harden online updates
...
Translate UI, scheduler, validation, preload and maintenance messages dynamically, and propagate locale changes between workers. Harden update checks, downloads and terminal states, verify Debian pnpm, and ignore generated test artifacts.
2026-10-17 07:07:09 +08:00
whyour
2cab112391
fix: 加固安全输入边界并修复订阅兼容性 ( #3084 )
...
* fix: harden scoped API inputs and isolate login throttling
* fix: close script path gaps and harden security boundaries
* fix: preserve subscription aliases and avoid extension eval
* fix: allow cancelling invalid historical subscriptions
* fix: make script parent validation explicit for CodeQL
* fix: limit command execution and clarify trusted path branches
* fix: separate diff tool script access from config APIs
* fix: clean up obsolete subscription SSH credentials
2026-10-06 18:21:54 +08:00
whyour
f168efcdae
refactor: migrate cron scheduling to node-cron ( #3079 )
...
* refactor: migrate cron scheduling to node-cron
* feat: support annually midnight and minutely cron macros
* fix: harden cron recovery and system scheduler compatibility
2026-09-27 22:18:39 +08:00
whyour
bf63425805
fix: isolate invalid cron rules during scheduler recovery
2026-09-27 16:45:09 +08:00
whyour
a8310e7d51
fix: restore legacy cron schedules and shell diagnostics ( #3078 )
2026-09-27 16:16:22 +08:00
whyour
4eb27427f8
fix: 修复 develop 调度锁、运行恢复与 Alpine 缓存并发 ( #3070 )
...
* fix: repair develop scheduler locks and runtime recovery
* test: wait for child reaping after verified termination
* fix: abort cron mutations when scheduler deletion fails
2026-09-13 13:44:44 +08:00
whyour
a94e665054
fix: 修复任务生命周期与调度就绪,优化执行和构建开销 ( #3069 )
...
* fix: harden task lifecycle and scheduler readiness
* fix: confine log writes to the configured log directory
* fix: verify complete build artifacts and untracked inputs
* fix: reconcile scheduler state and make stop win startup races
* fix: isolate cron generations and serialize scheduler recovery
2026-09-13 00:32:41 +08:00
whyour
276dfc2382
perf: bound runtime memory and storage usage
2026-08-16 16:29:06 +08:00
whyour
e92ddb0aed
修复添加任务有可能失败
2026-07-01 00:37:42 +08:00
Martha Ramirez
a942a5686f
修复删除定时任务后 crontab.list 残留导致订阅更新无法重新注册 ( #3021 )
...
* 修复删除定时任务后 crontab.list 未同步导致订阅更新无法重新注册脚本
crontab.list 作为数据库的文件镜像,其同步 setCrontab() 此前串行在尽力而为
的 gRPC addCron/delCron 调用之后:当调度 worker 重启等导致 gRPC 短暂不可用、
addCron/delCron reject 时,setCrontab() 会被跳过,crontab.list 与数据库脱节。
而 shell/update.sh 的 gen_list_repo() 将 crontab.list 作为"已有任务"真源,
于是订阅更新误判脚本已存在、跳过新增注册(前端再也看不到这些脚本)。
将 create/update/remove/disabled/enabled/autosave_crontab 中的 gRPC 调用改为
尽力而为(try/catch + 告警日志),保证 setCrontab() 总是执行;autosave_crontab
额外将 setCrontab 提前到 addCron 之前,确保启动/调度器重启时文件总是同步,
并避免 gRPC 失败导致应用启动崩溃。
调度器内存中的任务注册与 crontab.list/系统 crontab 同步是两个相互独立的关注点:
gRPC 失败时内存调度可能在调度器重启后由 autosave_crontab 重新注册,但文件同步
不应因此被阻断。修复后既有的 crontab.list 残留会在下次重启或任意增删改时自愈。
可能与 #2422(订阅更新重复添加任务)同根因。
* 过滤 delCron 中 scheduleStacks 的 null job
nodeSchedule.scheduleJob() 对无效 cron 表达式(如 "0 * /6 * * *",
空格分开了 * /6)会返回 null,原代码原样存入 scheduleStacks 数组。
delCron 取消时对 null 调 cancel() 抛出 UNKNOWN 错误,导致 gRPC
handler 中断、HTTP 端 cronService.remove() 跳过 setCrontab(),
crontab.list 残留已删任务的记录,导致订阅更新时 gen_list_repo()
误判脚本已存在、不再重新注册。
过滤 null 并对每个 cancel 调用加 try/catch 容错。
2026-06-30 23:48:51 +08:00
whyour
d3016431ce
定时任务显示完整运行历史
2026-06-28 15:48:58 +08:00
whyour
3044f63f03
修复国际化文案
2026-06-21 23:53:32 +08:00
whyour
96b4c90398
增加 sudo 命令判断
2026-06-13 00:53:41 +08:00
whyour
6796068523
更新国际化文案
2026-06-11 23:18:45 +08:00
whyour
05f8fd3805
接口提示信息国际化
2026-06-11 02:19:04 +08:00
whyour
946731ac8d
增加运行实例
2026-06-10 01:53:10 +08:00
whyour
fd6b4e4cde
定时任务增加 work_dir 设置
2026-06-07 13:19:01 +08:00
whyour
865e3035b9
开机运行任务同时开始运行
2026-06-01 23:24:10 +08:00
whyour
e8ac195c96
增加任务统计
2026-06-01 18:20:18 +08:00
whyour and dream10201
84d730d510
统一 Alpine/Debian 分支,QL_SCHEDULER 参数化调度
...
* 修改获取示例文件 api path
* 增加 debian-slim 基础镜像
* 修复 debian apt 命令,支持 qinglong 命令
* 更新 npm 版本 0.7.7
* 更新 npm v0.8.4
* 修复linux依赖检测 (#2082 )
* 修复拉取私有仓库
* 修复 shell check_server
* 修复 qinglong 命令
* 更新 npm 版本 v0.13.2
* 增加 debian 开发版本
* 修改切换 linux 镜像源
* 修复 qinglong 命令
* 移除 qinglong 命令 npm 默认镜像源
* 修复 workflow
* 更新 npm 版本 v0.14.5
* 增加 npx 命令
* 更新 workflow action 版本
* 更新 npm 版本 v0.16.0
* 修复 linux 镜像源
* 更新 npm 版本 v0.17.0
* 更新 npm 版本 v0.18.0
* 修改 npm 安装启动命令
* 更新 npm 版本 v0.19.9
* 修复 debian netcat 包名
* 更新 npm 版本 v0.20.4
* 安装 linux 依赖自动识别 alpine 和 debian
* 修改 apt 命令
* 更新 npm 版本 v0.21.2
* 修改 ts 文件执行依赖
* npm 启动增加 reload 逻辑
* 更新 npm 版本 v2.17.8
* 修复 qinglong 命令
* 更新 npm 版本 v2.17.9
* 更新 npm 版本 v2.17.10
* 更新 npm 版本 v2.17.11
* 修改 debian 版本为 12 bookworm
* 更新 npm 版本 v2.17.12
* 修改本地服务启动提示
* 更新 npm 版本 v2.17.13
* 写入文件增加文件锁
* 修复系统安装依赖提示
* 更新 npm 版本 v2.18.2-6
* 更新 nodejs 版本
* 更新 npm 版本 v2.18.3-3
* 修复 command 变量
* 移除自动清除 deb
* 修复 npm 启动脚本
* 修复发布 npm包依赖文件
* 修改 linux 启动文件逻辑
* 更新 npm 版本 v2.19.0-10
* 修复 apt 命令
* 更新 npm 版本 v2.19.1-0
* 更新 npm 版本 v2.19.2-2
* 增加 packageManager
* 增加用户 qinglong
* 更新 pipeline
* 移除 init_nginx
* 更新 npm 版本 v2.20.0
* 更新 npm 版本 2.20.1
* 更新 npm 版本 2.20.2
* fix: 修复非 root 用户启动
* chore: 合并 debian 和 alpine 逻辑
---------
Co-authored-by: dream10201 <xiuxiu10201@gmail.com >
2026-05-30 18:03:51 +08:00
whyour
d526602d19
修复运行中任务停止操作
2025-12-26 01:07:08 +08:00
whyour
5f0dafa010
修复 cron-parser import,websocket basepath
2025-12-23 00:28:16 +08:00
6a3dd4f83c
Fix null log_name issue by omitting it from shell command when not set ( #2849 )
...
* Initial plan
* Fix null log_name handling in runSingle method
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Update cron.log_name before makeCommand to avoid passing null to shell
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Fix: Only pass log_name to shell when it has a value
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Fix uniqPath calculation in runSingle for null log_name
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Improve comment clarity in makeCommand
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Refactor: Move no_tee and ID to initial commandVariable declaration
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Refactor: Simplify uniqPath ternary expression
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
2025-11-22 12:06:01 +08:00
03c7031a3c
Fix task duplication: add single/multi-instance support with UI configuration and stop all running instances ( #2837 )
...
* Initial plan
* Stop running tasks before starting new scheduled instance
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add multi-instance support and fix stop to kill all running instances
- Add allow_multiple_instances field to Crontab model (default: 0 for single instance)
- Add validation for new field in commonCronSchema
- Add getAllPids and killAllTasks utility functions
- Update stop method to kill ALL running instances of a task
- Update runCron to respect allow_multiple_instances config
- Backward compatible: defaults to single instance mode
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add UI support for allow_multiple_instances configuration
- Add allow_multiple_instances field to ICrontab interface
- Add instance mode selector in task creation/edit modal
- Add translations for instance mode in Chinese and English
- Default to single instance mode for backward compatibility
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add allow_multiple_instances column migration and optimize db.ts
- Add allow_multiple_instances column to Crontabs table migration
- Refactor migration code to use data-driven approach
- Replace 11 individual try-catch blocks with single loop
- Improve code maintainability and readability
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
2025-11-19 00:10:27 +08:00
08ef509e27
Optimize log file writes using stream pooling ( #2835 )
...
* Initial plan
* Implement LogStreamManager for optimized log writing
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Fix error handler in LogStreamManager to avoid race conditions
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
2025-11-16 21:11:10 +08:00
8f23c61fee
Add non-root Docker user support with automatic command setup ( #2830 )
...
* Initial plan
* Add non-root user guide and improve error messages
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add PM2_HOME configuration to fix non-root user permission errors
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Fix PM2 socket error by using /tmp for PM2_HOME instead of mounted volume
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Document symlink permission limitation for non-root users
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Clarify that scheduled tasks auto-adapt to use full paths when symlinks unavailable
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add error handling for symlink creation to prevent worker crashes
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add practical solutions for non-root users to use ql and task commands
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Modify linkCommand to create symlinks in ~/bin for non-root users
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* 修复链接 task 命令
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
Co-authored-by: whyour <imwhyour@gmail.com >
2025-11-15 01:46:24 +08:00
whyour
1deb264913
升级 cron-parser
2025-11-11 00:37:03 +08:00
whyour
06aa07329f
修复日志目录逻辑
2025-11-09 21:42:45 +08:00
c369514741
定时任务支持自定义日志文件或者 /dev/null ( #2823 )
...
* Initial plan
* Add log_name field to enable custom log folder naming
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add database migration for log_name column
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Add security validation to prevent path traversal attacks
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Apply prettier formatting to modified files
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Support absolute paths like /dev/null for log redirection
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
* Restrict absolute paths to log directory except /dev/null
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com >
2025-11-09 19:32:40 +08:00
whyour
07951964a1
修复模块注入
2025-10-26 22:32:03 +08:00
whyour
50769c43dd
修复 command-run 接口日志绑定
2025-07-12 20:29:44 +08:00
whyour
7d65d96ebd
修复 demo 环境提示
2025-05-24 14:56:49 +08:00
whyour
eb1c00984c
修复任务视图状态包含筛选
2025-05-20 23:40:18 +08:00
whyour
1a185f5682
修复创建脚本可能失败
2025-05-20 01:00:08 +08:00
whyour
8174762c18
demo 环境不自动运行任务
2025-05-08 01:43:14 +08:00
whyour
fa83761d27
修改定时规则类型
2025-02-21 01:35:08 +08:00
whyour
8173075b67
定时任务支持 @once 和 @boot 任务
2025-02-20 02:18:59 +08:00
whyour
496918131f
修复群晖通知参数,任务视图不属于筛选
2025-02-16 12:15:45 +08:00
whyour
25e8e8198d
修改 QLAPI 调用校验
2025-01-30 00:55:48 +08:00
whyour
6df651aa63
更新 ts-proto 版本
2025-01-29 23:29:45 +08:00
whyour
05f8bbd26e
写入文件增加文件锁,避免竞争条件引起文件内容异常
2025-01-04 01:22:29 +08:00
whyour
a41dd74048
修复 task_before/task_after 中换行后 crontab 不识别
2024-08-31 20:46:00 +08:00
whyour
7414a9d33d
执行任务增加结束日志
2024-08-31 14:43:44 +08:00
whyour
8b042d90f3
修复删除日志命令
2024-08-24 22:43:09 +08:00
whyour
90fe63211d
修复修改任务状态可能报错
2024-06-28 20:41:05 +08:00
whyour
46e71d8213
修复系统设置数据未初始化
2024-06-12 13:53:45 +08:00
whyour
c3908e956f
修复下载单文件订阅
2024-06-06 22:40:51 +08:00
whyour
07541569c5
修复定时任务 real_time 参数,升级 protobufjs
2024-06-02 11:08:35 +08:00
whyour
b309ac7613
修复有可能手动运行任务无日志
2024-05-25 00:28:55 +08:00
whyour
445dee00f7
修复脚本和日志列表获取软链接循环失败
2024-04-21 21:59:02 +08:00