定时任务与自动化脚本
自动化会稳定地重复错误
cron、systemd timer、PM2 cron restart、备份和清理任务在无人值守时运行,因此需要比手工命令更严格的边界。
常见差异:
- 工作目录不是项目目录。
- PATH 与 SSH 交互 Shell 不同。
- NVM 的 Node.js 可能找不到。
- 环境变量和权限不同。
- 多台服务器可能同时执行同一任务。
脚本应使用绝对路径、明确 cwd、有限输出、退出码、超时和通知。
防止任务重叠
flock -n /var/lock/nloop-cleanup.lock /usr/local/bin/nloop-cleanup
flock 可防止上一次未完成时再次启动,但锁文件路径、用户权限和分布式多机任务还需单独设计。多机只能依靠本地锁并不够。
清理任务
先在测试目录手工运行打印模式,再启用删除;限制根目录、文件类型、时间、最大深度和文件系统,并排除活跃任务。任务应输出删除数量和失败数量,不无限打印每个文件。
自动更新
无人值守安全更新需要维护窗口、重启策略、告警和验证。数据库、运行时和核心组件不宜仅靠一条 cron apt upgrade -y 管理。