說明:
操作系統:CentOS
站點1:bbs.osyunwei.com
站點2:sns.osyunwei.com
Nginx安裝路徑:/usr/local/nginx
Nginx配置文件路徑:/usr/local/nginx/conf/nginx.conf
站點1配置文件路徑:/usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf
站點2配置文件路徑:/usr/local/nginx/conf/vhost/sns.osyunwei.com.conf
目的:
1、對站點1和站點2的nginx訪問日志按天保存,日志路徑為:
站點1:/usr/local/nginx/logs/nginx_logs/bbs_logs
站點2:/usr/local/nginx/logs/nginx_logs/sns_logs
2、只保留30天以內的日志記錄
具體操作:
1、創建日志存放路徑
mkdir -p /usr/local/nginx/logs/nginx_logs/bbs_logs
mkdir -p /usr/local/nginx/logs/nginx_logs/sns_logs
2、設置Nginx日志記錄格式
vi /usr/local/nginx/conf/nginx.conf #編輯
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
取消日志記錄格式前面的注釋,在最后添加一行,如下所示:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$http_host $upstream_status $upstream_addr $request_time $upstream_response_time'; #新添加的一行
:wq! #保存退出
3、設置虛擬主機配置文件
vi /usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf #編輯,在bbs.osyunwei.com;這一行下面添加
access_log logs/bbs_access.log main; #注意這里的main要和上一步中的main一致
:wq! #保存退出
vi /usr/local/nginx/conf/vhost/sns.osyunwei.com.conf #編輯,在sns.osyunwei.com;這一行下面添加
access_log logs/sns_access.log main; #注意這里的main要和上一步中的main一致
:wq! #保存退出
系統運維 www.osyunwei.com 溫馨提醒:qihang01原創內容 版權所有,轉載請注明出處及原文鏈接
service nginx reload #重新加載nginx配置文件
4、創建Nginx日志切割腳本
vi /home/crontab/cut_nginx_log.sh #編輯
#!/bin/sh
logs_path="/usr/local/nginx/logs/"
DAYS=30
mv ${logs_path}bbs_access.log ${logs_path}nginx_logs/bbs_logs/bbs_access_$(date -d "yesterday" +"%Y%m%d").log
mv ${logs_path}sns_access.log ${logs_path}nginx_logs/sns_logs/sns_access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
find ${logs_path}nginx_logs/bbs_logs/ -name "bbs_access_*" -type f -mtime +$DAYS -exec rm {} \;
find ${logs_path}nginx_logs/sns_logs/ -name "sns_access_*" -type f -mtime +$DAYS -exec rm {} \;
:wq! #保存退出
chmod +x /home/crontab/cut_nginx_log.sh #添加腳本執行權限
5、添加任務計劃,修改/etc/crontab
vi /etc/crontab #在最后一行添加
0 0 * * * root /home/crontab/cut_nginx_log.sh #表示每天凌晨執行
:wq! #保存退出
6、重新啟動crond使設置生效
/etc/rc.d/init.d/crond restart #yum install -y vixie-cron安裝計劃任務,某些系統上可能沒有預裝
chkconfig crond on #設為開機啟動
service crond start #啟動
每天會在/usr/local/nginx/logs/nginx_logs/bbs_logs和/usr/local/nginx/logs/nginx_logs/sns_logs
目錄下生成類似bbs_access_20140126.log和bbs_access_20140126.log的日志文件
并且只保留最近30天的日志記錄
至此,Linux下定時切割Nginx訪問日志并刪除指定天數前的日志記錄完成。
備注:如果腳本在執行過程中出現下面錯誤
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
解決辦法:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#使用nginx -c的參數指定nginx.conf文件的位置