爬虫是阻止了,但爬虫记录却一直在,一天几十兆的日志文件越积越大,磁盘空间白白被占用了。关掉吧,偶尔还是会查看一下日志。
之前用Oneinstack的时候,它会按照时间进行切割并且自动压缩打包,如今使用手动安装,不得不靠自己来配置了。
先看看网上的教程,排在之前的结果基本上都提供了三种方法:
- Nginx内部配置设置日志文件格式。(推荐方法1,map方式)
- 写脚本,通过定时任务按天重命名日志、重启nginx的方法实现(有重启失败的风险)
- 通过工具cronolog+Crontab实现
再看一下Oneinstack,没找到map方面的代码,也没有计划任务,只有在官网的回复中提到可以修改配置文件/etc/logrotate.d/nginx
。其中的内容如下:
/data/wwwLogs/*nginx.Log {
daily
rotate 5
missingok
dateext
compress
notifempty
sharedscripts
postrotate
[ -e /var/run/nginx.pid ] && kill -USR1 `cat/var/run/nginx.pid`
endscript
}
先不管上面的代码是什么意思,首要问题是这个配置文件是如何工作的呢?通过对整个代码的浏览,发现这是为logrotate程序准备的配置。
在Linux系统中,Logrotate是一个强大的日志文件管理工具,它可以自动分割、压缩、删除和创建新的日志文件。对于Nginx服务器,日志轮转是维护服务器性能和安全的重要步骤,因为它可以防止日志文件无限制地增长并占用大量磁盘空间。
Debian安装的话,执行下列命令:
sudo apt update
sudo apt -y install logrotate
如果习惯使用apt-get的方式,直接替换上面的apt即可。
使用logrotate --version
命令检查一下版本及默认的程序(邮件程序、压缩程序和压缩格式等):
默认安装的配置如下:
/var/Log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 cat `/var/run/nginx.pid`
fi
endscript
}
貌似两者相差不大,其中:
- daily:每天切割一次(也可以使用weekly、monthly进行周切割或月切割) missingok:如果日志文件不存在则忽略错误
- rotate:后面的数字代表日志保留多少天,超过该天数则会被删除
- compress:压缩旧的日志文件(压缩程序取决于安装时的设置,比如gzip)
- delaycompress:如果一个日志还正在写入或被程序使用,分割后将会稍后压缩
- notifempty:如果文件为空则不处理
- create 640 nginx adm:设置切割后新的日志文件权限是640,属主是nginx,属组是adm
- sharedscripts:所有的log文件执行切割完成后,再执行下面的脚本
- postrotate:下面[]号中的内容,是向nginx主进程发送一个USR1的信号,告诉nginx,日志已经切割,你应该使用新的文件。
- endsrciprs:脚本结束
- dateext:这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20241226这样,如果注释掉,切割出来是按数字递增,即前面说的xxx.log-1这种格式
给网站单独新建一个规格,比如weblog,将代码首行中的日志目录修改成自己的,其余可以套用Oneinstack中的内容。
过上几天看看效果吧。