crontab 入门:让 Linux 自动帮你做重复的事

举报
yd_96310213 发表于 2026/10/24 16:32:18 2026/10/24
【摘要】 每天凌晨手动备份数据库?每周手动清理一次日志?这些重复劳动,Linux 上有一个干了几十年的老工具替你搞定:crontab。它是系统自带的定时任务调度器,写一行规则,剩下的交给时间。crontab 的时间规则每条定时任务都是一行,格式固定:分 时 日 月 周 命令五个时间字段,星号表示"每":`* * * * *`:每分钟`0 2 * * *`:每天凌晨 2 点`30 8 * * 1`:每周...

每天凌晨手动备份数据库?每周手动清理一次日志?这些重复劳动,Linux 上有一个干了几十年的老工具替你搞定:crontab。它是系统自带的定时任务调度器,写一行规则,剩下的交给时间。

crontab 的时间规则

每条定时任务都是一行,格式固定:

分 时 日 月 周 命令

五个时间字段,星号表示"每":

  • `* * * * *`:每分钟
  • `0 2 * * *`:每天凌晨 2 点
  • `30 8 * * 1`:每周一早上 8:30
  • `0 0 1 * *`:每月 1 号零点

新手最容易错的是"周"的取值:0 和 7 都代表周日,1 到 6 是周一到周六。

三个命令走天下

  • `crontab -e`:编辑自己的定时任务(第一次会让你选编辑器,选 nano 最省心)
  • `crontab -l`:查看当前所有任务
  • `crontab -r`:清空所有任务(危险,确认再用)

实战:每天凌晨自动备份

假设你要每天凌晨 2 点把网站目录打包备份:

0 2 * * * tar -czf /backup/site-$(date +\%Y\%m\%d).tar.gz /var/www/html

注意两个坑:crontab 里百分号 % 必须转义成 \%,否则会被当成换行;命令尽量写绝对路径,因为定时任务的环境变量和你登录的 shell 不一样。

加完任务,用 crontab -l 确认,再看一眼系统日志有没有报错(journalctl -u cron 或 /var/log/cron)。想验证规则对不对,可以先设成"每分钟执行一次"观察:

* * * * * echo "cron ok $(date)" >> /tmp/cron-test.log

看到 /tmp/cron-test.log 每分钟多一行,说明调度正常,再改成正式时间。

三个血泪教训

1. 路径问题:定时任务里 python 可能找不到,用 which python3 查出绝对路径再写。 2. 权限问题:备份目录要提前建好并确认可写,不然凌晨 2 点静默失败,你早上才发现。 3. 邮件轰炸:任务有输出时系统会发本地邮件,在命令末尾加 >/dev/null 2>&1 丢掉不需要的输出。

从"每天定闹钟手动操作"到"写一次规则永久生效",crontab 是每个玩 Linux 的人早晚都要交的朋友。先从一条"每分钟写日志"的测试任务开始,十分钟后,你就敢把真正的备份任务交给它了。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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