站点运营

站点运营:定时任务与计划任务自查,别让自动化在半夜悄悄失败

站点的定时发布、站点地图生成、缓存清理、数据库备份等任务大多在深夜无人值守时执行,成功无人知,失败也无人晓。本文从任务清单梳理、执行验证、失败告警、依赖冲突和改版后复查几个角度,给出一份可落地的定时任务自查方法,帮你把站点的后台流水线盯住。

站点运营

站点运营:定时任务与计划任务自查,别让自动化在半夜悄悄失败

很多站点的日常运转,靠的不是编辑每天手动点发布,而是一批看不见的定时任务:到点自动发布内容、每天生成一份站点地图、定期清理缓存、凌晨备份数据库、把新地址推送给搜索引擎。这些任务大多数跑在深夜,成功了没人夸,失败了也没人知道,直到某天你发现站点地图里还是上个月的内容,或者备份文件停在了三个月前。

一、先把站点上的定时任务列成清单

不少团队的任务是历史遗留,加的时候记得,过两个月就忘了。做自查的第一步不是检查运行状态,而是先搞清楚到底有哪些任务。

  • 服务器层面的 crontab、系统计划任务
  • 主机面板里的计划任务(宝塔、cPanel 等)
  • 应用内部的调度器,比如框架自带的任务队列、内容系统的定时发布
  • 外部服务里的定时任务,比如监控探针、CDN 的刷新脚本

把这三四处的任务合并成一张表,标注执行频率、负责脚本、输出位置和负责人。有了清单,后面每一步才有对照物。

二、确认任务是不是真的在跑

写进 crontab 不等于在运行。命令行环境和你在终端里手动敲命令的环境差别很大,常见翻车点包括:脚本里用的是相对路径、脚本依赖的环境变量在 cron 里根本不存在、命令行调用的 PHP 或 Node 版本与网站运行版本不一致、脚本文件没有执行权限。

验证方法很简单,看产物:

  • 站点地图文件的最后修改时间是不是今天
  • 备份目录里最新一个压缩包是哪天的
  • 日志文件有没有按天切割
  • 定时发布的内容是否按计划上线
判断一个任务有没有执行,最直接的办法不是看配置文件,而是看它产出的文件或数据的最后修改时间。

三、失败的时候要让运维知道

定时任务最大的问题是静默失败。系统默认会把 cron 的输出通过邮件发给本地用户,而很多服务器压根没配邮件服务,等于把错误信息直接丢掉了。

输出不要直接扔进 /dev/null

至少把标准输出和错误输出重定向到一个日志文件,保留最近若干次执行的记录。出问题时,这几行日志往往比什么都管用。

关键任务要配告警

  • 任务失败时发一封邮件或一条 IM 消息
  • 重要任务可以设置失败重试一次
  • 连续多次失败时升级通知,而不是每次都重复刷屏

四、留意任务之间的依赖和冲突

单个任务正常,不代表放在一起正常。多个任务同时段执行,很容易互相踩脚:备份脚本锁表时前台访问变慢、生成站点地图的同时正在批量发布内容、清缓存和生成静态页撞在一起,结果谁都没做干净。

  • 把对资源敏感的任务错开时间,不要都堆在整点
  • 给任务加锁,防止上一次还没跑完下一次又被触发
  • 备份、批量生成这类吃 IO 和 CPU 的任务,尽量安排在访问低谷,并适当限制资源占用

五、改版之后要回头复查一遍

站点改版、目录调整、数据库改名之后,很多任务会悄悄失效。比如内容发布脚本还指向旧路径,站点地图生成脚本还在读已经废弃的表,URL 推送脚本的接口密钥早就换了。这些任务表面上还在执行,实际上产出的全是空结果或旧数据。

  • 每次结构或路径调整后,对照任务清单逐条回归
  • 删掉已经没用的任务,减少噪音
  • 把硬编码的路径、域名、密钥集中到配置文件里
  • 在运维文档里记录任务的变更历史

把这项检查和备份演练、日志检查一起放进月度运维清单,花不了多少时间,却能避免很多说不清来源的问题。

定时任务是站点的后台流水线,平时看不见摸不着,一旦停摆,最先受影响的往往是内容更新和 URL 发现这类基础环节。与其等发现异常再回头翻日志,不如定期花半小时核对一遍清单和执行结果,让自动化真正可靠地替你干活。