说到Nginx日志备份,这事儿看着简单,但真踩过坑的人都知道——日志文件越滚越大,磁盘空间说爆就爆,等到排查问题时发现日志已经被覆盖,那才叫一个欲哭无泪。其实,用cron配合一个简单的shell脚本就能搞定定期备份,自动、省心、还能保留历史记录。下面就把这套标准化流程拆开来讲,每一步都配了代码,直接复制改路径就能用。

-
先写一个备份脚本,比如命名为
backup_nginx_logs.sh。脚本的逻辑很直白:指定Nginx日志目录和备份目标目录,用当前日期给备份文件命名,然后打包压缩,顺便把30天前的旧备份清掉。具体内容如下:#!/bin/bash # 设置日志文件和备份目录 nginx_logs_path="/var/log/nginx" backup_dir="/path/to/your/backup/directory" # 获取当前日期 current_date=$(date +"%Y-%m-%d") # 创建备份目录(如果不存在) mkdir -p "$backup_dir" # 备份Nginx日志文件 tar -czf "$backup_dir/nginx_logs_$current_date.tar.gz" -C "$nginx_logs_path" . # 删除30天前的备份文件 find "$backup_dir" -type f -name "*.tar.gz" -mtime +30 -exec rm {} \;注意:把
nginx_logs_path和backup_dir换成你服务器上实际的路径。 -
脚本写好后,给它加上可执行权限,否则cron跑不起来:
chmod +x backup_nginx_logs.sh -
接下来配置cron任务。编辑当前用户的crontab文件:
crontab -e -
在编辑器里加一行,定义执行时间。比如希望每天凌晨1点自动备份,就写:
0 1 * * * /path/to/your/backup_nginx_logs.sh记得把路径换成脚本的实际位置。
-
保存退出,cron就会按你设定的时间表自动运行脚本。如果想调整备份频率(比如每小时、每周),改cron表达式就行。保留天数也可以自己控制——上面脚本里
-mtime +30表示删除30天前的文件,改成+7就是保留一周,按需修改。
这套方法的好处是零依赖、纯系统工具,几乎任何Linux发行版都能直接跑。唯一需要留意的就是备份目录的磁盘空间,别让备份文件本身把磁盘撑爆——记得定期检查或者设置监控告警。