前言
前段时间安装了goaccess日志统计,分割网站日志时因为crontab 定时任务执行时间不准确,生成的每日统计页面经常有 2 个时间段,这里分享下切割网站日志精确到秒的方法。以便 goacess 日志统计更加准确,还可以配合其他更多脚本使用。
日志切割脚本
#!/bin/bash
#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=(yunloc.com yunloc-oult)
#set the path to nginx.
nginx_sbin="/usr/local/nginx/sbin/nginx"
#Set how long you want to save
save_days=31
# 获取当前时间的小时、分钟和秒
hour=$(date "+%H")
minute=$(date "+%M")
second=$(date "+%S")
# 判断当前时间是否在指定时间范围内(精确到秒)
if [[ 10#$hour -eq 23 && 10#$minute -eq 59 && 10#$second -eq 59 ]]; then
# 在指定时间范围内执行任务
echo "$(date '+%H:%M:%S') Current time is within the designated time range. Executing task..."
mkdir -p $log_files_dir
log_files_num=${#log_files_name[@]}
#cut nginx log files
for((i=0;i<$log_files_num;i++));do
mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(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 {} \;
wait
$nginx_sbin -s reload
echo "$(date '+%H:%M:%S') complete."
else
# 不在指定时间范围内
echo "$(date '+%H:%M:%S') Current time is outside the designated time range. Waiting for specified time..."
# 循环等待,每秒钟判断一次当前时间是否在指定时间范围内
while true; do
# 获取当前时间的小时、分钟和秒
hour=$(date "+%H")
minute=$(date "+%M")
second=$(date "+%S")
# 判断当前时间是否在指定时间范围内(精确到秒)
if [[ 10#$hour -eq 23 && 10#$minute -eq 59 && 10#$second -eq 59 ]]; then
# 当前时间在指定时间范围内,执行任务并跳出循环
echo "$(date '+%H:%M:%S') Current time is within the designated time range. Executing task..."
mkdir -p $log_files_dir
log_files_num=${#log_files_name[@]}
#cut nginx log files
for((i=0;i<$log_files_num;i++));do
mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(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 {} \;
wait
$nginx_sbin -s reload
echo "$(date '+%H:%M:%S') complete."
break
fi
# 等待 1 秒
sleep 1
done
fi
此脚本是通过军哥的 LNMP 备份脚本修改而来。
设定定时任务
59 23 * * * /bin/bash /root/cut_nginx_logs.sh
结语
设定为每日 23:59 分执行,脚本会每隔 1 秒检查时间是否为预定时间,如果没到时间就继续检查,直到时间为 23:59:59 才会执行任务。
© 本站文章随意转载,但请注明出处!
>> 如果您觉得本站文章对您有所帮助,购买 VPS 时候请走本站AFF链接!
>> 某些文章具有时效性,若内容有错误或已失效,欢迎在下方评论区留言向我们反馈.
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!
THE END
暂无评论内容