在网站没有问题的情况下,这个网站日志看上去没什么作用。但一旦网站有情况发生,这个网站日志可是会给我们很好的参考价值的。日志中会一直记录着网站运营的状况。前段时间,网站出了状况,于是就想到了网站日志。进FTP一看,晕死,这个日志好大呀,有5G那大,这也太吓人了,要打开这么大的日志文本,就已经非常难了,更合况还要从网上下载下来看。为什么不让网站日志按日期来命名,让它每天都有单独的日志呢?
我的网站不是apache服务器,没有apache那么灵活。那么,nginx服务器上的网站日志怎样才能按日期来命名?
第一步:创建 log_new_del.sh 这样一个shell命令文件,
vim log_new_del.sh
第二步:把下面的代码放到log_new_del.sh文件中:
LOGS_PATH=/alidata/log/nginx/access/
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日志
mv ${LOGS_PATH}/wanlimmc.log ${LOGS_PATH}/wanlimmc_${YESTERDAY}.log
mv ${LOGS_PATH}/ssmay.log ${LOGS_PATH}/ssmay_${YESTERDAY}.log#向nginx主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样操作导致日志切割失败。
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#删除3天前的日志
find ${LOGS_PATH} -mtime +3 -name "wanlimmc*" | xargs rm -f
find ${LOGS_PATH} -mtime +3 -name "ssmay*" | xargs rm -f
exit 0
第三步:设置定时执行log_new_del.sh命令:
要想定时执行,就要使用crontab。把log_new_del.sh命令放到crontab中:
vim /etc/crontab #进入编辑crontab
59 23 * * * root /bin/sh /usr/local/log_new_del.sh #在每天23点59分开始执行log_new_del.sh命令
注:sh命令路径不同的服务器可以路径不一样,我这里以/bin/sh为例,一般情况直接使用 sh就可以了。这样,我们就完成了对nginx服务器下的网站日志的命名按日期来了。而且定时删除3天前的日志。