nginx日志分割-shell案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013862108/article/details/83902544

现象,我在windows环境下写了一个sh脚本,然后ftp到liunx服务器,代码看起来非常正确,就是执行不了.报错如下:

cannot  stat  '/alidata/server/nginx/logs/\r/access.log'

问题:脚本编码问题

解决:

vim 下命令

普通模式  :set  ff    //查看编码 doc  或者unix

              :set  fileformat=unix   //设置编码

脚本代码:

#!/bin/bash

savepath_log='/opt/nginx/logs'

nglogs='/alidata/server/nginx/logs'

mkdir -p $savepath_log/$(date +%Y)/$(date +%m)

mv ${nglogs}/access.log ${savepath_log}/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log

mv ${nglogs}/error.log ${savepath_log}/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log

kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`

#USR1 重新打开一个日志文件

分析: 

1. nginx 的主进程收到USR1信号,会重新打开日志文件(配置文件中设置的日志,如果不存在,会自动创建一个新的xxx.log)

2. 在没有执行kill -USR1 `cat ${pid_path}` 之前,即便已经对文件执行了mv命令改变文件名称,nginx还是会向新命名的文件access_20160801.log 照常写入日志数据的。原因是linux系统中内核是根据文件描述符来找文件的。

猜你喜欢

转载自blog.csdn.net/u013862108/article/details/83902544