SEO 百科
定时任务
本页目录
定时任务
定时任务 让服务器在指定时间自动执行某条命令。在 Linux 上,这套机制由 cron 守护进程提供,规则写在 crontab 文件里[1]。站长用它定时备份、生成站点地图和清理日志。规则写错或脚本跑得太久,会占满服务器资源,连带拖慢抓取。
crontab 的写法
crontab 的每一行由五个时间字段和一条命令组成,五个字段分别是分钟、小时、日、月、星期[1]。
写法看一个例子:
# 每天凌晨 3 点备份数据库
0 3 * * * mysqldump --defaults-extra-file=/root/.my.cnf mydb > /backup/mydb.sql
# 每周一凌晨 4 点清理 30 天前的日志
0 4 * * 1 find /var/log/app -mtime +30 -delete
星号表示这个字段的每个取值都匹配,*/5 表示每隔 5 个单位执行一次[1]。cron 里没有交互,密码要写在单独的配置文件里,再用 --defaults-extra-file 指过去。
站长的常见用途
站长用定时任务做几件事。
- 备份:定时导出数据库、打包站点文件并传到异地。
- 站点地图:内容更新后重新生成 sitemap.XML,再提交给搜索引擎。
- 清理日志:删掉过期日志,免得磁盘被写满。
- 续期证书:在证书到期前自动申请新证书。
面板把这几件事做成图形界面。1Panel 把计划任务列进主要功能[7],宝塔面板同样提供计划任务[6]。
跑错与跑爆的后果
服务器资源有限。一条每分钟执行、又跑得很慢的任务,会持续占用处理器和磁盘,别的服务被挤到没有可用资源。
命令写错破坏更大。清理脚本里的目录一旦写错,可能删掉正在使用的文件。
时间字段写错会让任务在不该跑的时候启动。把 0 3 * * * 写成 * * * * *,任务就变成每分钟执行一次。
任务还会一起挤在同一分钟。cron 每分钟检查一次,排在同一分钟的任务会同时启动[2]。一堆任务挤在午夜,会形成瞬时高峰。
定时任务与抓取的联系
任务跑爆会拖慢服务器,页面响应变长。Google 说明,站点响应时间变慢时,抓取容量上限会降低,抓取量随之减少[4]。
备份和生成站点地图本身在帮抓取。站点地图更新后提交,能提示搜索引擎有哪些新网址。百度说明“Baiduspider 会根据网站内容更新频率和服务器压力等因素自动调整抓取频次”[5]。
另一方面,任务失败往往不声不响。定时任务在后台运行,出错也少有人看。UptimeRobot 提供定时任务监控,任务没按时上报心跳就会报警[3]。
还有一种后果来自磁盘。日志被写满后站点无法响应,爬虫直接抓不到页面。
常见误用
- 用
* * * * *起步测试,忘了改回正常频率。 - 任务之间不拉开时间,一起在凌晨启动,形成高峰。
- 后台脚本没有超时或并发限制,上一轮没跑完下一轮又开始。
- 输出不重定向。cron 反复发邮件,日志也可能被写满。
附录
参见
参考资料
官方(境外)
- 《crontab(5) manual page》,man7.org。
- 《cron(8) manual page》,man7.org。
- 《Cron job monitoring》,UptimeRobot。
- 《面向大型网站所有者的抓取预算管理指南》,Google 搜索中心。
官方(国内)
- 《平台工具使用手册(抓取频次)》,百度搜索资源平台,2020-08-14 更新。
- 《宝塔面板》,宝塔面板。
- 《产品介绍》,1Panel。
外部链接
无。