爬虫是阻止了,但爬虫记录却一直在,一天几十兆的日志文件越积越大,磁盘空间白白被占用了。关掉吧,偶尔还是会查看一下日志。
之前用Oneinstack的时候,它会按照时间进行切割并且自动压缩打包,如今使用手动安装,不得不靠自己来配置了。
先看看网上的教程,排在之前的结果基本上都提供了三种方法:

  1. Nginx内部配置设置日志文件格式。(推荐方法1,map方式)
  2. 写脚本,通过定时任务按天重命名日志、重启nginx的方法实现(有重启失败的风险)
  3. 通过工具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命令检查一下版本及默认的程序(邮件程序、压缩程序和压缩格式等):
logrotate_version.png
默认安装的配置如下:

/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中的内容。
过上几天看看效果吧。

最后修改:2025 年 01 月 24 日
如果觉得我的文章对你有用,请随意赞赏