fix(#1714): beat 调度文件改 /tmp,修复定时巡检任务从未执行 #1736
Reference in New Issue
Block a user
Delete Branch "fix/beat-schedule-permission-1714"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
PR #1734 部署 staging 验证时发现:worker 容器内 celery beat 进程启动即崩溃,日志:
根因
celery运行,工作目录/app/apps/worker属 root(755),celery 用户不可写;-B)未指定--schedule路径,celery beat 默认在 CWD 创建celerybeat-scheduleshelve 持久化文件 → 权限拒绝 → beat 进程退出;注:worker 启动恢复(worker_ready 信号,不依赖 beat)工作正常——staging 实测孤儿 job 02eed0d9 已被自动重置 pending 重派并转码完成。
修复
entrypoint-worker.sh 为内嵌 beat 增加
-s /tmp/celerybeat-schedule:/tmp对 celery 用户可写;部署后效果
测试
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
-s) 指定在/tmp目录下,虽然解决了容器内非 root 用户写入权限的问题,但该目录通常属于临时存储。在容器重启或崩溃后,调度状态(如上次运行时间)会丢失,可能导致周期性任务在重启后立即重复执行。如果对任务执行时间精度要求较高,建议通过 Docker Volume 将该路径挂载到持久化存储中。✅ 良好实践
-s参数是一个良好的实践,避免了 Celery 默认在当前目录(可能不可写)创建文件导致的启动失败,增强了脚本在不同环境下的兼容性。🤖 由 AI 代码审查机器人自动生成 | 2026-09-06 06:14:58 | 模型:
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1736 已关闭或合并,对应的预览环境已被清理。