如何运行生产环境的 Cron 任务而不出现静默失败
Cron 任务很容易设置,也很容易被遗忘。我见过夜间导入任务连续三天失败,因为脚本打印了错误、以零状态退出,而没人查看日志文件。应用程序看起来很健康,因为 Web 进程运行正常。缺失的数据直到客户询问为什么昨天的报告是空的才被发现。 我现在的一条规则是:生产任务在拥有归属权、锁、超时机制和失败路径之前,都不算完成。锁比人们想象的更重要。如果一个任务可能与自身重叠,迟早会因为运行缓慢而与下一次任务发生冲突,从而产生重复工作。对于许多团队来说,简单的数据库建议锁或任务表就足够了。 超时时间也应该在脚本之外设置。如果进程在网络调用上挂起,调度程序需要终止它并将运行标记为失败。在任务内部,我记录运行 ID、开始时间、输入范围、读取记录数、写入记录数和跳过的行数。对于导入任务,我还存储高水位标记,以便重试时可以安全地继续,而不是盲目猜测。 对于涉及账单、电子邮件或客户记录的任务,我从第一天起就将"…