nginx 的 access_log 太大了,网上找到很多的方法都是 shell 脚本定时凌晨 mv 到另一个文件里。
然后使用 kill -USR1 "cat ${log_path}/nginx.pid"重新生成新的日志文件。
我的疑问是:
为什么不 reload 呢?貌似 reload 也可以生成新的日志。
求问各位大佬
1
holyghost 2017-10-09 10:23:20 +08:00
HUP changing configuration, keeping up with a changed time zone (only for FreeBSD and Linux), starting new worker processes with a new configuration, graceful shutdown of old worker processes
USR1 re-opening log files 如果只是 log rotate 的话,可以,但是不应该 |
2
mentalidade OP @holyghost 那就是推荐第一种方式了。谢谢大佬
|
3
oaix 2017-10-09 11:21:49 +08:00
有种通用的方式清空文件.
echo > 文件名 如果在 linux 上使用 bash, echo 也可以不要. |
4
mentalidade OP @oaix 并不是清空,只是把日志按照每天的日期存放在不同的文件,这些日志还有用呢。 不过直接 mv 之后并不会生成新的 access_log 文件,reload 或者第一种方法就可以生成新的 access_log 文件了
|
5
0ZXYDDu796nVCFxq 2017-10-09 12:07:44 +08:00 8
kill -USR1 等于 nginx -s reopen
这个信号量本来就是用于重新读取日志文件的 kill -USR2 等于 nginx -s reload reload 和 reopen 的行为相差很大,reopen 仅仅检查日志文件,reload 会重载配置,并启动新 worker,关闭旧 worker 具体参考官方文档: http://nginx.org/en/docs/beginners_guide.html |
6
mentalidade OP @gstqc 懂了,非常感谢
|
7
ayiis 2017-10-09 14:07:09 +08:00
试试从源头上解决你的问题(按日期生成 log 文件):
```bash # save as new logfile by date if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") { set $year $1; set $month $2; set $day $3; } access_log logs/access.log_$year.$month.$day main; ``` |
8
mentalidade OP @ayiis 我感觉这种毕竟要修改 nginx.conf 文件,引入变量,性能方面也不知道,这个 mv 文件的没有任何其他的侵入性
|
11
0ZXYDDu796nVCFxq 2017-10-09 14:40:44 +08:00
@ayiis 这个效率会非常感人
1. if 效率低,容易出错 2. access_log 的文件名使用变量,无法使用写缓存,而且每次写日志,都会打开文件、关闭文件。就是说,每一个有日志的请求,都会产生打开文件、关闭文件的操作。 合理的做法是每天跑一下 mv 文件,nginx -s reopen |
12
janxin 2017-10-09 14:57:21 +08:00 via iPhone
我用 logrotate
|
13
0ZXYDDu796nVCFxq 2017-10-09 14:57:34 +08:00 1
|
14
rainyday031 2017-10-09 16:05:53 +08:00
配置 logrotate,更简单方便
|
15
ayiis 2017-10-09 16:18:41 +08:00
|
16
mentalidade OP @gstqc 收到,
|
17
julyclyde 2017-10-09 16:41:05 +08:00
/etc/init.d/nginx reload 等同于 nginx -s reload 就等同于 kill HUP
|