一、日志清理类(磁盘报警救急)
# 每天凌晨2点,删除7天前的Nginx日志
0 2 * * * find /var/log/nginx -name "*.log" -mtime +7 -delete
# 每周日凌晨3点,压缩上周的Tomcat日志(节省空间)
0 3 * * 0 tar -czf /backup/logs/tomcat_$(date -d "last week" +\%Y\%m\%d).tar.gz /var/log/tomcat/*.log --remove-files
# 每月1号,清空系统审计日志(需sudo权限)
0 0 1 * * echo > /var/log/secure && echo > /var/log/messages
二、数据库备份类(救命稻草)
# 每天凌晨1点,备份MySQL所有数据库(保留7天)
0 1 * * * mysqldump -uroot -p'密码' --all-databases | gzip > /backup/mysql/all_$(date +\%Y\%m\%d).sql.gz && find /backup/mysql -type f -mtime +7 -delete
# 每小时备份Redis RDB文件(覆盖式)
0 * * * * cp /var/lib/redis/dump.rdb /backup/redis/dump.rdb_$(date +\%Y\%m\%d\%H)
# 每天凌晨3点,备份PostgreSQL指定库
0 3 * * * pg_dump dbname | gzip > /backup/postgres/db_$(date +\%Y\%m\%d).sql.gz
三、服务监控与自愈
# 每分钟检查Nginx是否运行,挂了自动拉起
* * * * * systemctl status nginx || systemctl start nginx
# 每5分钟检查端口8080(Java应用),无响应则重启
*/5 * * * * curl -f http://localhost:8080/health || systemctl restart java-app
# 每天8点,定时重启PHP-FPM(解决内存泄漏)
0 8 * * * systemctl restart php-fpm
四、数据同步与分发
# 每30分钟,从主服务器拉取配置文件
*/30 * * * * rsync -avz user@192.168.1.100:/etc/nginx/ /etc/nginx/ --delete
# 每天23点,同步本地备份到异地容灾
0 23 * * * rsync -avz --password-file=/etc/rsync.pass /backup/ backup@192.168.2.200::backup/
# 每2小时,生成业务报表并推送FTP
0 */2 * * * python /opt/scripts/generate_report.py && curl -T report.csv ftp://user:pass@10.0.0.5/
五、磁盘与性能告警
# 每10分钟检查磁盘,超过80%发微信告警
*/10 * * * * df -h | awk '$5 > 80 {print "磁盘爆满: "$1,$5}' | xargs -I {} curl -X POST -d "msg={}" https://qyapi.weixin.qq.com/...
# 每天9点,邮件发送昨日流量统计
0 9 * * * cat /var/log/nginx/access.log-$(date -d "yesterday" +\%Y\%m\%d) | awk '{print $1}' | sort | uniq -c | sort -nr | head -10 | mail -s "昨日IP排行" admin@example.com
六、定时任务调试技巧
# 1. 避开高峰期:备份类任务放在凌晨2-4点
# 2. 分钟错峰:避免整点同时运行,用1-59随机值,如 23 3 * * *
# 3. 生产环境一定要用绝对路径!建议在crontab开头定义PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin
# 4. 日志重定向(必加)
0 2 * * * /opt/script/backup.sh >> /var/log/backup.log 2>&1
# 5. 秒级实现(每10秒):用sleep
* * * * * /opt/script/check.sh
* * * * * sleep 10; /opt/script/check.sh
* * * * * sleep 20; /opt/script/check.sh
发表回复