Nginx日志切割脚本
目前网上也有一些Nginx日志切割脚本,但是论坛还是有用户反映网上Nginx日志切割脚本有问题,我感觉一般是因为脚本中的参数设置问题,或者是crontab中的设置问题。
为方便lnmp一键安装包用户,我也写了一个Nginx日志切割脚本,下载地址:http://soft.vpser.net/lnmp/ext/cut_nginx_logs.sh
如果是lnmp0.5/0.6/0.7/0.8/0.9通用,用户可以仅修改log_files_name后面的要切割的日志文件名就直接使用。
脚本主要参数:
#设置nginx日志文件目录路径
log_files_path="/home/wwwlogs/"
#日志文件将会存放到/home/wwwlogs/年/月/日志文件名_年月日.log
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#设置要切割的日志的名字,如果日志目录下面的日志文件名为vpser.net.log,则填写vpser.net,每个日志名用空格分隔
log_files_name=(access vpser.net licess)
#设置nginx文件的位置
nginx_sbin="/usr/local/nginx/sbin/nginx"
#设置日志保存的时间,天
save_days=30
如果是非lnmp一键安装包用户可以通过修改上述参数适应你的nginx环境。
将nginx日志切割脚本下载到/root/下面。再添加自动执行,执行:crontab -e
输入:00 00 * * * /bin/bash /root/cut_nginx_logs.sh 每天0点整开始切割脚本。
本文仅供Nginx用户及lnmp用户参考,如有问题欢迎到https://bbs.vpser.net反馈。
原创文章谢绝转载!
>>转载请注明出处:VPS侦探 本文链接地址:https://www.vpser.net/manage/cut-nginx-log-files.html
@sevensky, 你只需要按要求填好日志文件的名字就行了。
哪个语句是数组。
每个日志名用空格分隔
log_files_name=(access vpser.net licess) 这里怎么填啊
log_files_name=vpser.net 2.vpser.net 3.vpser.net 不行..
log_files_num=${#log_files_name[@]} 这句怎么理解的:roll:
vhost.h
建议修改94 95 96 行为
al="log_format $al_name '\$remote_addr - \$remote_user [\$time_local] \"\$request\" '
'\$status \$body_bytes_sent \"\$http_referer\" '
'\"\$http_user_agent\" \$http_x_forwarded_for';
# log_format http://www.mydomain.com '$remote_addr - $remote_user [$time_local] $request '
# '$status $body_bytes_sent $http_referer '
# '$http_user_agent $http_x_forwarded_for';
log_format http://www.mydomain.com '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /home/wwwlogs/www.mydomain.com.log http://www.mydomain.com;
日志格式调整一下.YEAH
博主,我贴的脚本是我自己改了.
只是 日志格式 不能被识别.不知道什么原因
@板凳南瓜,
1、转移日志是昨天日期,请查看代码。
2、分析日志暂时不会加,如有需求可以自行添加
3、已有删除指定天数的设置,请查看代码或仔细阅读文章
4、0.6以后日子已从/home/wwwroot/logs/移至/home/wwwlogs/建议手动修改nginx.conf移动日志位置。
@板凳南瓜,
在/home/wwwroot/logs/下创建index.php
内容是PHP 的,就是列出目录 来访问.
建议增加一个日志分析工具,每天0点后
默认日志文件名为域名.log
1.转移日志为 昨天日期
2.分析日志处理
3.清除N天的日志
但是发现日志格式有点问题,还请博主修正
#!/bin/bash
#function:cut nginx log files for lnmp v0.5 and v0.6
#author: http://lnmp.org update by http://folwin.com
#set the path to nginx log files
log_files_path="/home/wwwlogs/"
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#set nginx log files you want to cut
#log_files_name=(access vpser licess)
#set thpath to analysis output
logs_output=/home/wwwroot/logs/
#set the path to nginx.
nginx_sbin="/usr/local/nginx/sbin/nginx"
#Set how long you want to save
save_days=30
############################################
#Please do not modify the following script #
############################################
mkdir -p $log_files_dir
#cut nginx log files
for i in /usr/local/nginx/conf/vhost/*;do
domain=$(basename ${i});
mv ${log_files_path}${domain}.log ${log_files_dir}/${domain}_$(date -d "yesterday" +"%Y%m%d").log
done
$nginx_sbin -s reload
#analysis logs
for i in /usr/local/nginx/conf/vhost/*;do
domain=$(basename ${i} .conf);
echo "${domain}";
mkdir -p ${logs_output}${domain};
/usr/bin/webalizer -p -o logs_output${domain} -n "${domain}" -t "${domain}" ${log_files_dir}/${domain}_$(date -d "yesterday" +"%Y%m%d").log;
done
#delete 30 days ago nginx log files
find $log_files_path -mtime +$save_days -exec rm -rf {} \;
在/home/wwwroot/logs/下创建index.php
@赵国昊, nginx和php可以暂时用本站的升级脚本升级,其他的会陆续出升级脚本。
请问 我目前是 0.4的LNMP 如何升级到0.6啊?
@xx, 修改/usr/local/nginx/conf/nginx.conf
问一下,安装lnmp0.6时,绑定的域名的规则如何修改,路径在哪?我想改为wordpress的规则。
为什么不用cronolog?
@暗の世界, 因为直接用/bin/bash直接执行,只要有读权限就可以了。
chmod +x /root/cut_nginx_logs.sh
最好加上权限设置,否则绝对有人会问为什么执行不了。