crontab 入门:让 Linux 自动帮你做重复的事
每天凌晨手动备份数据库?每周手动清理一次日志?这些重复劳动,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 的人早晚都要交的朋友。先从一条"每分钟写日志"的测试任务开始,十分钟后,你就敢把真正的备份任务交给它了。
- 点赞
- 收藏
- 关注作者
评论(0)