很多站点的問题不是出在白天的編輯和發布上,而是出在夜里那些没人看的計划任務里:内容没按时發出来、站点地图半年没重新生成、备份跑了一半就断了。這些事情不會彈窗,也不會有人打电话告诉你,只會安静地积累成事故。
為什么定时任務容易變成盲区
定时任務的特点是「成功了没人看,失敗了也没人看」。它不像頁面报错那样有訪客投诉,也不像磁盘寫满那样立刻有反應。等到某天發現資料對不上、新頁面迟迟没被抓取,回头看日誌才發現任務已经停了几個月。
所以定时任務需要一份自己的巡检清單,而且最好固定周期做,而不是出問题才想起来查。
值得列進清單的常见任務
- 内容定时發布:排好期的文章是否按点上线,有没有卡在草稿狀態。
- 站点地图生成:新頁面是否被寫進 sitemap,刪除的頁面是否還留在里面。
- 日誌轮轉與清理:轮轉是否生效,临时文件有没有越滚越大。
- 資料备份:备份文件的大小和時間是否正常,能否恢复。
- 缓存预热或刷新:更新後是否真的把舊内容替換掉了。
- 統計與报表同步:外部資料拉取失敗时,是否只剩一張空表。
自查时重点看這几項
1. 有没有执行记錄
每個任務至少留下一行「几点開始、几点結束、结果如何」的记錄。没有记錄就無從判断它是正常跑完了,還是根本没啟動。看记錄时不要只看最後一行,往前翻两周,更容易發現間歇性失敗。
2. 失敗之後谁来知道
连續失敗几次就發一條通知,這是最省事的做法。通知渠道不必复杂,邮件或群消息都行,關键是要有人在看。如果告警發到一個没人订阅的信箱,等于没有告警。
3. 並發與重复执行
上一轮還没跑完,下一轮又啟動了,容易出現重复寫入或者資料错乱。检查任務有没有加鎖,或者有没有設定「上一次未結束則跳過」。在任務耗时變長时,這個問题會突然冒出来。
4. 耗时與超时
记一下每個任務最近几次的耗时。如果從几秒涨到几分钟,說明資料量在增長或者有慢查询,繼續拖下去迟早會撞上超时上限,被系統直接掐断。
5. 時間表達式與时区
「每天凌晨三点」到底是服務器時間還是本地時間,寫表達式时容易搞混。跨时区或者夏令时切換的服務器,更要確認一次實际触發時間。
6. 依赖顺序
先抓資料再生成頁面,先备份再清理舊文件,顺序反了就會得到空資料或者残缺备份。把有依赖關系的任務排好先後,別让它們扎堆在同一分钟。
留一個手動兜底的口子
不管自動化做得多顺,都要保留手動触發的方式,並寫清楚在哪执行。真出事的时候,能手動补跑一次,比從头排查調度器快得多。同时把關键任務的說明记在运维文档里,別只存在某個人的收藏夹中。
定时任務不需要多复杂,但需要有人定期確認它還在跑。一次十分钟的巡检,往往能省掉一次几小时的排查。
建议把這件事和服務器维護的其他检查放在同一個周期里,比如每周固定看一次执行记錄和告警记錄,顺手確認备份文件的時間和大小。時間長了,這份习惯本身就會成為站点稳定的一部分。