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 反复发邮件,日志也可能被写满。

附录

参见

参考资料

官方(境外)

  1. 《crontab(5) manual page》,man7.org。
  2. 《cron(8) manual page》,man7.org。
  3. 《Cron job monitoring》,UptimeRobot。
  4. 《面向大型网站所有者的抓取预算管理指南》,Google 搜索中心。

官方(国内)

  1. 《平台工具使用手册(抓取频次)》,百度搜索资源平台,2020-08-14 更新。
  2. 《宝塔面板》,宝塔面板。
  3. 《产品介绍》,1Panel。

外部链接

无。