Cron 定时任务实战:让 Linux 服务器自己干活

举报
yd_282444815 发表于 2026/11/02 12:26:48 2026/11/02
【摘要】 每天凌晨 2 点自动备份网站数据、每周清理一次过期日志、每 5 分钟检查一次服务状态——这些重复性的运维工作,完全可以交给 cron。本文从零开始,带你掌握 Linux 定时任务的实战用法。 一、cron 是什么cron 是 Linux 自带的定时任务服务,由守护进程 crond 常驻后台,每分钟检查一次是否有任务需要执行。用户通过 crontab 命令管理自己的定时任务表。先确认服务在运行...

每天凌晨 2 点自动备份网站数据、每周清理一次过期日志、每 5 分钟检查一次服务状态——这些重复性的运维工作,完全可以交给 cron。本文从零开始,带你掌握 Linux 定时任务的实战用法。

一、cron 是什么

cron 是 Linux 自带的定时任务服务,由守护进程 crond 常驻后台,每分钟检查一次是否有任务需要执行。用户通过 crontab 命令管理自己的定时任务表。

先确认服务在运行:

systemctl status crond

未运行的话,用下面命令启动并设为开机自启:

systemctl enable --now crond

二、读懂时间表达式

crontab 每行由 6 部分组成,前 5 个是时间字段,最后是命令:

* * * * * command
分 时 日 月 周
字段 取值范围
分 0-59
时 0-23
日 1-31
月 1-12
周 0-7(0 和 7 都表示周日)

常用符号:

  • *:表示“每”,即该字段的每个取值
  • ,:枚举,如 1,15 表示 1 号和 15 号
  • -:范围,如 9-17 表示 9 点到 17 点
  • /:步长,如 */5 表示每 5 个单位执行一次

几个常见写法:

*/5 * * * * /opt/check.sh     # 每 5 分钟执行一次
0 2 * * * /opt/backup.sh      # 每天凌晨 2 点执行
0 9 * * 1 /opt/weekly.sh      # 每周一上午 9 点执行
30 3 1 * * /opt/monthly.sh    # 每月 1 号凌晨 3:30 执行

三、常用操作

crontab -e    # 编辑当前用户的定时任务
crontab -l    # 查看当前用户的定时任务
crontab -r    # 删除当前用户所有定时任务(慎用)

crontab -e 默认用 vi 打开编辑器,不习惯的话可以先执行 export EDITOR=vim。

除了用户级任务,还有系统级任务:/etc/crontab 和 /etc/cron.d/ 目录下的规则会多一个“以哪个用户执行”的字段:

0 2 * * * root /opt/backup.sh

另外 /etc/cron.daily/、/etc/cron.hourly/ 等目录里的可执行脚本也会被定时执行,适合放简单的日常脚本。

四、实战:网站自动备份

先写一个备份脚本 /opt/backup.sh:

#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czf /backup/www-$DATE.tar.gz /var/www/html
find /backup -name "www-*.tar.gz" -mtime +7 -delete

再加一条定时规则,每天凌晨 2 点执行:

0 2 * * * /bin/bash /opt/backup.sh >> /var/log/backup.log 2>&1

这条规则做了三件事:打包网站目录并用日期命名、删除 7 天前的旧备份、把输出追加到日志文件方便排查。

五、避坑指南

  1. 环境变量缺失:cron 执行时的 PATH 很短,脚本里尽量使用命令的绝对路径,或在 crontab 开头声明:PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin。
  2. 输出重定向:命令的输出默认会发邮件给任务属主,建议统一追加到日志:>> /var/log/xxx.log 2>&1。
  3. 任务重叠:如果任务执行时间可能超过执行间隔,用 flock 加锁避免并发:*/5 * * * * /usr/bin/flock -n /tmp/check.lock /opt/check.sh。
  4. 注意时区:云服务器上先用 timedatectl 确认系统时区是否符合预期。
  5. 权限别忘:脚本要有可执行权限,chmod +x /opt/backup.sh 别忘了。

六、任务没跑起来怎么查

systemctl status crond     # 服务是否在运行
crontab -l                 # 规则是否真的保存成功
grep CRON /var/log/cron    # 系统日志里有没有执行记录

最常见的情况是“脚本手动能跑,放进 cron 就不跑”,九成是环境变量或相对路径的问题。把脚本放到 cron 的最小环境里单独跑一遍,基本都能定位。

结语

cron 看似简单,但把“时间表达式 + 可靠脚本 + 日志记录”这三件套用好,就能接管大部分重复性运维工作。从每天自动备份开始,让服务器在你睡觉的时候替你干活吧。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。