以下是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就出错,还是因为编码问题