host
|
57f8852634
|
fix: worker 代码变化自退 + 部署时清孤儿 worker
2026-10-27 暂存清理实弹:05:51 的旧 docker worker 成孤儿后
继续用旧代码抢任务、按老路失败且不删暂存;autoscaler 用
start_new_session=True 拉 worker、部署重启杀不到非 unit 进程。
两层修:
1. worker 常驻循环每轮边界比对 worker.py 文件签名
(mtime_ns + size),部署换目录后必变,变了就以 75
(EX_TEMPFAIL,失败类)退出——检查点在轮次边界,绝不
中断在跑任务。退出后:unit 托管的由 systemd on-failure
重拉新版,autoscaler 托管的由 reconcile 重拉,孤儿直接
消失。附带好处:以后部署不用再手动重启本地 worker。
2. host_deploy.sh 换目录后、启动服务前清孤儿:按 cgroup
过滤杀非 .service 的 cloud.worker 进程(桥接修补前就存
在的孤儿),先 TERM(跑完当前任务再退),30 秒未退的
再 KILL;unit 托管的(如 host-1)不动。pgrep 用
[c]loud.worker 写法,避免检查命令自匹配。
测试:test_worker.py 新增 2 个(签名变了则 75 退出且不认领、
签名不变则跑到 max_seconds);反向验证:撤掉 worker 修复
时正好前者变红。清扫过滤器主机干跑:两个现役 worker 均
为 unit cgroup,全 KEEP,杀 0 个。全量 deploy 19、host
62、cloud 619 全过。
|
2026-10-27 11:23:49 +08:00 |
|