备份不能每天依赖管理员手动敲命令执行,必须交给系统按计划自动运行。
在 Linux 中,定时任务由 cron 守护进程负责调度。它会在后台按照预定时间自动执行指定命令,是系统管理员必须掌握的基础能力之一。
本节目标:
- 学会编写标准的 crontab 定时规则;
- 独立完成“九月通知发布”综合实践,作为全课通关考核。
配置 crontab 定时任务
每个用户都可以通过 crontab -e 配置自己的定时任务表。
编写定时任务时,建议把命令和文件路径都写成绝对路径。
原因是 cron 运行时的环境变量比较简洁,不会像登录终端一样完整继承用户当前的 PATH。如果只写命令名或相对路径,任务可能会因为找不到文件而执行失败。
crow@opsbox:~/work$ mkdir -p /home/crow/work/scheduled
crow@opsbox:~/work$ systemctl is-active cron
active
crow@opsbox:~/work$ EDITOR=nano crontab -e
在打开的编辑器末尾添加下面这一行,然后保存退出:
* * * * * /usr/bin/tar -czf /home/crow/work/scheduled/latest.tar.gz -C /home/crow/work source >> /home/crow/work/scheduled/backup.log 2>&1
这行任务的含义是:
- 每分钟执行一次;
- 使用绝对路径调用
tar; - 将
/home/crow/work/source打包成压缩包; - 输出文件写入
/home/crow/work/scheduled/latest.tar.gz; - 标准输出和错误输出都追加写入
backup.log。
其中:
>> ... 2>&1
表示把普通输出和错误输出都重定向到同一个日志文件。这样即使定时任务失败,也能从日志里排查问题。
等待 1 分钟后,可以查看执行结果:
crow@opsbox:~/work$ crontab -l
crow@opsbox:~/work$ ls -l scheduled/latest.tar.gz
crow@opsbox:~/work$ tar -tzf scheduled/latest.tar.gz
如果能看到新的压缩包,并且 tar -tzf 能列出里面的文件,说明 cron 定时备份已经成功运行。
读懂 Crontab 的五个时间字段
Crontab 的基本格式如下:
┌───────────── 分钟 (0 - 59)
│ ┌─────────── 小时 (0 - 23)
│ │ ┌───────── 日期 (1 - 31)
│ │ │ ┌─────── 月份 (1 - 12)
│ │ │ │ ┌───── 星期几 (0 - 7,0 和 7 都是周日)
│ │ │ │ │
* * * * * 要执行的命令
可以简单记为:
分 时 日 月 周 命令
常见写法示例:
30 2 * * *
表示每天凌晨 02:30 执行。
0 */2 * * *
表示每隔 2 小时的整点执行一次,例如 00:00、02:00、04:00……
15 3 * * 1
表示每周一凌晨 03:15 执行。

