Linux crontab 定时任务完全指南——让服务器自动干活

运维就该懒一点——能用定时任务自动干的,就别亲自登录服务器。

什么是 crontab?

Linux 下的定时任务工具。每天固定时间帮你执行脚本、清理日志、备份数据。

基本用法

crontab -e     # 编辑定时任务
crontab -l     # 查看当前任务
crontab -r     # 删除所有任务

时间格式

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

常用例子

每天凌晨 2 点清理日志:

0 2 * * * /root/scripts/clean-logs.sh

每 10 分钟检查服务是否存活:

*/10 * * * * /root/scripts/check-services.sh

每周一早上 8 点备份数据库:

0 8 * * 1 /root/scripts/backup-db.sh

每月 1 号凌晨 3 点生成报表:

0 3 1 * * /root/scripts/gen-report.sh

三个实用场景

1. 日志自动清理

0 3 * * * find /var/log -name "*.log" -mtime +30 -delete

每天晚上 3 点删除 30 天前的日志。

2. 自动备份

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

每周日凌晨 4 点打包备份网站。注意 crontab 里 % 要用反斜杠转义。

3. 监控磁盘

*/30 * * * * df -h | mail -s "disk usage" admin@example.com

每半小时把磁盘用量发到邮箱。

注意事项

  1. 路径要用绝对路径 —— crontab 默认 PATH 很短,写脚本路径时写全
  2. 输出重定向 —— 不加重定向的话,命令输出会发邮件给你

  3. 2 * /script.sh > /dev/null 2>&1

  4. 日志记录 —— 建议把输出记到文件方便排查

  5. 2 * /script.sh >> /var/log/cron-script.log 2>&1

  6. 环境变量 —— crontab 环境跟登录 shell 不一样,脚本里需要 source ~/.bashrc 或者写全环境变量

排错

定时任务没执行?检查:

# 看 cron 服务在不在跑
systemctl status crond

# 看日志
grep CRON /var/log/cron

总结

刚学会用 crontab,先把"每天备份"和"日志清理"两个任务配起来。能把重复性工作自动化掉,运维才像个运维。