forked from Tinywan/lua-nginx-redis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Shell_Nginx_Log_cut.sh
56 lines (40 loc) · 1.45 KB
/
Shell_Nginx_Log_cut.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
#function: Nginx log timing backup and delete
# get nginx PID
# pid = $(cat /var/run/nginx.pid)
pid=$(ps -aef | grep nginx | grep -v grep | grep master |awk '{print $2}')
## if nginx running else exit 1
#if [[ $? == 0 && -n $pid ]]
#then
# exit 1;
#fi
#set the path save nginx log files
base_path="/home/tinywan/logs"
# get data eg:201611
log_dir_name=$(date -d yesterday +"%Y%m")
# get days eg:03
DAY=$(date -d yesterday +"%d")
# create log directory
mkdir -p $base_path/$log_dir_name
# set the path to nginx log
log_files_path="/usr/local/nginx/logs/"
#set nginx log files you want to cut eg: array
log_files_names=(access error)
#set the path to nginx.
nginx_sbin="/usr/local/nginx/sbin/nginx"
#Set how long you want to save eg: 7 days
save_mins=1
#log file num eg: 2
log_files_num=${#log_files_names[@]}
#loop cut nginx log files
for log_name in ${log_files_names[*]}
do
sudo mv ${log_files_path}${log_name}.log ${base_path}/${log_dir_name}/${log_name}_${DAY}.log
done
#向 Nginx 主进程发送 USR1 信号,USR1 信号是重新打开日志文件
sudo kill -USR1 $pid
#delete 7 days ago nginx log files
find $base_path -mindepth 1 -maxdepth 3 -type f -name "*.log" -mmin +$save_mins | xargs rm -rf
#################### crontab edit 每天凌晨 1:55 执行该脚本 #####################
# 55 1 * * * bash /home/tinywan/shell/nginx_log_cut.sh >/dev/null 2>&1
##############################################################################