
Linux 定时任务实战
让服务器在凌晨两点自动帮你干活
Linux基础 实战课
Linux 运维进阶 · 定时任务篇
————————————————
💬 有一类活,适合让机器干,不适合让人干——那就是「凌晨两点执行备份」这种事。
之前接了个项目,甲方要求每天凌晨把数据库备份一次,传到另一台服务器存档。第一周我是手动跑的,结果有天晚上忘了,第二天被运维主管叫去问话。那天之后我花了半小时配好了 crontab,从此再也没忘过——机器不会忘,不会累,也不会睡过头。
这篇手把手教你用 crontab 设定时任务,从语法到实战,看完就能上手。
————————————————
一、crontab 是什么?
crontab 是 Linux 内置的定时任务工具,全称 cron table(定时表)。你在里面写好「什么时候、执行什么命令」,系统后台的 cron 守护进程就会在指定时间自动帮你跑。
它能做什么?
● 每天凌晨自动备份数据库
● 每小时清理一次临时文件
● 每周一早上 8 点发一封状态报告邮件
● 每 5 分钟检查一次服务是否还活着
💡 cron 服务需要在运行才能执行定时任务。检查:systemctl status cron(Debian/Ubuntu)或 systemctl status crond(CentOS)。
二、cron 时间表达式:看懂这 5 个字段
crontab 的每一行长这样:
分钟 | 小时 | 日期 | 月份 | 星期 | 命令 |
0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 要执行的命令 |
特殊符号的含义:
符号 | 含义 |
* | 任意值(每分钟/每小时/每天……) |
, | 枚举:1,3,5 表示 1、3、5 |
- | 范围:1-5 表示 1 到 5 |
/ | 步长:*/5 表示每隔 5 |
三、常用示例:看懂就会写
cron 表达式 | 含义 |
0 2 * * *命令 | 每天凌晨 2:00 执行 |
30 8 * * 1命令 | 每周一早上 8:30 执行 |
*/5 * * * *命令 | 每 5 分钟执行一次 |
0 */2 * * *命令 | 每隔 2 小时执行一次 |
0 0 1 * *命令 | 每月 1 号午夜执行 |
0 8,12,18 * * *命令 | 每天 8:00、12:00、18:00 执行 |
0 2 * * 1-5命令 | 每周一至周五凌晨 2:00 |
💡 不确定自己写的表达式对不对?用 https://crontab.guru 在线验证,输入表达式会用自然语言翻译给你看,特别好用。
四、操作 crontab:三条核心命令
crontab -e | 编辑当前用户的定时任务(推荐用这个) |
⚠️ crontab -r 会删除全部任务,没有确认提示!手滑了就什么都没了。建议改任务前先 crontab -l > backup.txt 备份一下。
五、实战:四个最常用的定时任务
直接给你能复制粘贴的版本:
① 每天凌晨 2 点备份 MySQL 数据库:
0 2 * * * /usr/bin/mysqldump -u root -p密码 数据库名 > /backup/db_$(date +%Y%m%d).sql | 每日凌晨2点备份 |
② 每 5 分钟检查 Nginx 是否存活,挂了自动重启:
*/5 * * * * systemctl is-active --quiet nginx || systemctl restart nginx | Nginx 存活守卫 |
③ 每周日凌晨 3 点清理超过 30 天的日志:
0 3 * * 0 find /var/log/nginx -name '*.log.*' -mtime +30 -delete | 定期清理旧日志 |
④ 每天早上 8 点发系统状态报告(邮件):
0 8 * * * df -h | mail -s '每日磁盘报告' admin@example.com | 每日状态播报 |
💡 crontab 里的命令要用绝对路径。比如 /usr/bin/mysqldump 而不是 mysqldump——cron 执行时的 PATH 环境变量和你终端里的不一样,直接写命令名可能找不到。
如果任务跑出错了,怎么查原因?cron 默认会把输出发邮件,但大多数服务器没配邮件。最保险的方法是把日志重定向出来:
0 2 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1 | 把输出和错误都记到日志文件 |
⚠️ 2>&1 这一段不能少!不加的话脚本里的报错信息会被静默吞掉,出了问题完全不知道为什么。
总结
crontab 要记的核心就这三件事:
① 五字段语法:分 时 日 月 周 命令
② 三个操作:-e 编辑、-l 查看、-r 删除(-r 慎用)
③ 生产使用两个好习惯:命令用绝对路径、输出重定向到日志文件
有了 crontab,服务器就真正变成了一个会自己干活的机器人。配合上一篇的 Shell 脚本,你能搭出一套轻量级的自动化运维体系。
————————————————
下篇预告:《Linux 环境变量入门:装了软件却找不到命令?搞懂 PATH 就好了》
💬 你现在服务器上有哪些跑着的定时任务?
评论区聊聊,说不定能给别人一个思路
👍 点赞💬 留言🔄 转发给需要的朋友
有问题欢迎评论区留言,看到都会回复