以下是nginx日志切割的脚本,按天切割
$(date +%d) 获取当月第几天,如5月18日,就会取出来是18
这样,可以做到按月循环,只保留一个月的日志,而不用担心去清理过期的日志了
脚本请在crontab中设置执行,如在每天23点59分是执行日志切割脚本
59 23 * * * /usr/local/nginx/nginxlog_happy.sh

以下红色字是脚本内容:
savepath_log保存日志的路径
nginxlogs当前nginx默认的日志,如果你是装在/usr/local/nginx目录,那日志就和脚本上一样

vim /usr/local/nginx/nginxlog_happy.sh  (使用vim命令新建一个bash日志分割脚本nginxlog_happy.log用以定时分割日志使用)内容如下:

(注意,实际使用时请删除粗体部分的中文注释,下文注释旨在便于您的阅读)


#/bin/bash 

#Site:Happy

#Email:happy.yin@qq.com
yesterday=$(date +%Y-%m-%d)  #取得服务器当前时间

savepath_log='/usr/local/nginx/logs/happylogs'#分割后的日志文件保存目录(注意结尾目录斜杠去掉)

nglogs='/usr/local/nginx/logs'  #nginx日志文件目录,具体根据实际地址替换(结尾目录斜杠去掉 以免与下面路径中的"/"重复)

 

#判断分割日志保存目录是否存在不存在则创建 

if [ ! -d ${savepath_log} ]   # 注意 语句之间 空格不可省略,这是bash脚本 不是php脚本那样随和 

then

mkdir -p ${savepath_log}

fi 

#通过mv命令将日志移动到分割后的日志目录里,然后发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件。

mv ${nglogs}/access.log  ${savepath_log}/access_${yesterday}.log  #具体根据你的实际日志文件名路径 进行修改access.log名字

mv ${nglogs}/error.log  ${savepath_log}/error_${yesterday}.log  #具体根据实际日志文件名地址 修改error.log名字

mv ${nglogs}/host.access.log  ${savepath_log}/host.access_${yesterday}.log 
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)  #通知nginx重新生成新的日志

 

下面进行最重要的一步:(建议采用第二种方式进行修改)

crontab -e 在里面输入如下内容:(每晚23点59分执行日志分割,注意中间的空格,如果该命令找不到crontab文件选用下列方式修改即可)

59  23  * * * /usr/local/nginx/nginxlog_happy.sh

如果上面命令找不到文件地址可使用如下 命令查找crontab 文件进行修改:

vim /etc/crontab在最后一行添加

59  23  * * * /usr/local/nginx/nginxlog_happy.sh

重新启动crond使设置生效

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron 安装计划任务,某些系统上可能没有预装需要执行此操作进行安装
chkconfig crond on #设为开机启动
service crond start #启动
如果直接复制的话,要注意字体编码的问题,很多windows上的脚本上传到linux就出错,还是因为编码问题

posted on 2020-04-29 11:32  李留广  阅读(170)  评论(0编辑  收藏  举报