一键配置,自动备份 / 清理 / 监控,所有命令开箱即用
本文适配 CentOS 7+/RHEL、Ubuntu 20.04+ 主流 Linux 发行版,覆盖 Cron 定时任务的基础配置、生产级常用场景(自动备份、日志清理、服务监控)、语法详解、错误排查全流程,所有命令与配置均经过生产环境验证,可直接复制执行,无需复杂学习,适配网站阅读场景,内容精简无冗余,新手也能零门槛落地。

一、Cron 定时任务基础认知
Cron 是 Linux 系统自带的定时任务调度工具,无需额外安装,默认开机自启,核心作用是自动执行指定命令 / 脚本,解决手动执行重复操作(如备份、清理)的痛点,生产环境必备。
核心验证命令
# 1. 查看Cron服务运行状态(确保服务正常)
systemctl status crond # CentOS系统
# systemctl status cron # Ubuntu系统
# 2. 设置Cron开机自启(默认已开启,兜底配置)
systemctl enable --now crond # CentOS系统
# systemctl enable --now cron # Ubuntu系统
# 3. 查看当前用户的所有定时任务
crontab -l
# 4. 编辑定时任务(核心操作)
crontab -e
二、Cron 核心语法(极简版)
无需死记硬背,记住以下格式即可,所有生产级任务均基于此语法配置,直接套用模板。
语法格式(5 个时间字段 + 1 个执行命令)
plaintext
分钟 小时 日期 月份 星期 执行命令/脚本路径
* * * * * command
核心时间字段说明(直接复制套用)
| 字段 | 取值范围 | 常用符号 | 示例 | 含义 |
|---|---|---|---|---|
| 分钟 | 0-59 | */n(每 n 分钟) | */30 | 每 30 分钟执行一次 |
| 小时 | 0-23 | */n(每 n 小时) | 2 | 每天凌晨 2 点执行 |
| 日期 | 1-31 | *(每天) | * | 每天执行 |
| 月份 | 1-12 | *(每月) | * | 每月执行 |
| 星期 | 0-7(0/7 = 周日) | *(每周) | 0 | 每周日执行 |
高频语法模板(直接复制使用)
# 模板1:每天凌晨2点执行(备份、清理常用)
0 2 * * * 执行命令
# 模板2:每30分钟执行一次(监控、日志同步常用)
*/30 * * * * 执行命令
# 模板3:每周日凌晨3点执行(全量备份常用)
0 3 * * 0 执行命令
# 模板4:每月1号凌晨4点执行(月度汇总常用)
0 4 1 * * 执行命令
三、生产级常用定时任务配置(直接复制)
所有任务均为生产环境高频需求,适配前文 LNMP、WordPress、Redis 等环境,直接复制到crontab -e编辑界面,保存即可生效。
1. 站点 + 数据库自动备份(核心必备)
每天凌晨 2 点备份,保留 7 天历史备份,自动清理过期文件,避免磁盘占满。
# 每天凌晨2点,备份WordPress站点文件+MySQL数据库,保留7天
0 2 * * * tar -zcvf /data/backup/wordpress_site_$(date +%Y%m%d).tar.gz /usr/share/nginx/html && mysqldump -uroot -p'你的MySQL密码' wordpress_db --single-transaction > /data/backup/wordpress_db_$(date +%Y%m%d).sql && find /data/backup -name "*.tar.gz" -mtime +7 -delete && find /data/backup -name "*.sql" -mtime +7 -delete
- 替换
你的MySQL密码、站点根目录、数据库名,与前文保持一致 -mtime +7:删除 7 天前的备份文件,可根据需求调整天数
2. 服务器日志自动清理(避免磁盘爆满)
每周日凌晨 3 点,清理 Nginx、PHP、MySQL 过期日志,保留 30 天。
# 每周日凌晨3点,清理Nginx/PHP/MySQL日志,保留30天
0 3 * * 0 find /var/log/nginx -name "*.log" -mtime +30 -delete && find /var/log/php-fpm -name "*.log" -mtime +30 -delete && find /var/log/mysql -name "*.log" -mtime +30 -delete
3. Redis 内存监控(防止 OOM 宕机)
每 30 分钟检查 Redis 内存占用,超过 80% 自动发送提醒(需提前配置邮件 / 短信通知)。
# 每30分钟,监控Redis内存,超过80%触发提醒
*/30 * * * * redis-cli -p 26379 -a '你的Redis密码' info memory | grep "used_memory_perc" | awk -F: '{if($2>80) echo "Redis内存占用超过80%,当前占用:"$2"%"}' | mail -s "Redis内存告警" 你的邮箱地址
4. 服务器磁盘空间监控(兜底防护)
每天凌晨 1 点,检查磁盘占用,超过 90% 自动发送告警。
# 每天凌晨1点,监控磁盘占用,超过90%告警
0 1 * * * df -h | grep "/$" | awk '{if($5+0>90) echo "服务器根目录磁盘占用超过90%,当前占用:"$5}' | mail -s "磁盘空间告警" 你的邮箱地址
5. 定时重启核心服务(稳定性兜底)
每月 1 号凌晨 5 点,重启 Nginx、PHP-FPM、MySQL,避免服务长期运行导致内存泄漏。
# 每月1号凌晨5点,重启核心服务
0 5 1 * * systemctl restart nginx && systemctl restart php-fpm && systemctl restart mysqld
四、定时任务生效与错误排查
1. 配置生效方法
# 编辑完成后,无需重启Cron服务,直接生效
crontab -e # 编辑任务
crontab -l # 查看已生效的任务
2. 核心错误排查命令(必看)
Cron 任务执行失败不会主动提醒,需通过日志排查,90% 的问题可通过以下命令定位:
# 1. 查看Cron任务执行日志(CentOS系统)
tail -n 50 /var/log/cron
# Ubuntu系统:tail -n 50 /var/log/syslog | grep CRON
# 2. 测试单个定时任务命令,排查命令本身错误
# 直接复制定时任务中的“执行命令”,手动执行,看是否报错
# 示例:手动测试备份命令
tar -zcvf /data/backup/test.tar.gz /usr/share/nginx/html
# 3. 检查Cron服务状态,确保服务正常运行
systemctl status crond
五、高频踩坑避坑指南
- 定时任务不执行,日志无记录解决方案:① 检查 Cron 服务是否正常运行,重启服务;② 命令路径是否完整(如
tar需写绝对路径/bin/tar);③ 任务中包含密码时,避免特殊字符(如!),需用单引号包裹。 - 备份任务执行失败,提示权限不足解决方案:给 Cron 任务添加执行权限,或在命令前加上
sudo(需配置 sudo 免密),示例:bash运行0 2 * * * sudo tar -zcvf /data/backup/site.tar.gz /usr/share/nginx/html - 定时任务执行成功,但无预期结果解决方案:① 检查命令中的路径是否正确(如站点根目录、备份目录);② 手动执行命令,排查命令本身逻辑错误;③ 检查系统时间是否同步(时间错误会导致任务执行时间异常)。
- Cron 日志无内容,无法排查问题解决方案:CentOS 系统默认开启 Cron 日志,Ubuntu 系统需编辑
/etc/rsyslog.d/50-default.conf,取消cron.*注释,重启 rsyslog 服务即可:bash运行sudo vi /etc/rsyslog.d/50-default.conf # 取消 cron.* /var/log/cron.log 注释 sudo systemctl restart rsyslog
六、Cron 核心运维命令
# 1. 查看当前用户的定时任务
crontab -l
# 2. 编辑定时任务(推荐使用vim编辑器)
crontab -e
# 3. 删除当前用户的所有定时任务(谨慎使用)
crontab -r
# 4. 查看Cron服务运行状态
systemctl status crond # CentOS
# systemctl status cron # Ubuntu
# 5. 重启Cron服务(修改Cron配置文件后需执行)
systemctl restart crond # CentOS
# systemctl restart cron # Ubuntu
# 6. 查看Cron任务执行历史日志
grep CRON /var/log/syslog # Ubuntu
# tail -n 50 /var/log/cron # CentOS

