解决nginx按照每天备份日志Crontab定时任务不生效

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Z__Sheng/article/details/89520283

1.首先,我们先需要在本地编写一个sheel脚本,我这边本地是win10的系统。nginx是部署在linux系统中(sheel脚本需要放在linux系统中),以.sh结尾

2.需要执行的脚本代码为,注意里面的nginx中的log路径,需要替换成你自己的log路径。

#/bin/bash
#备份日志的路径
bakpath='/opt/openresty/nginx/backlogs'
#nginx日志路径
logpath='/opt/openresty/nginx/logs'
#在备份路径下创建年月子目录--按照月备份文件夹
mkdir -p $bakpath/$(date +%Y)/$(date +%m)
#移动日志文件到备份路径,并改名为日期格式
mv $logpath/access.log $bakpath/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log
mv $logpath/error.log $bakpath/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log
#用 USR1 信号让nginx重新打开日志文件
kill -USR1 `cat /opt/openresty/nginx/logs/nginx.pid`

3.我们将脚本文件写好以后,放至linux系统中的文件夹内。这个可自己定义。
然后我们需要在linux系统中创建定时任务,具体步骤是
先输入crontab -e,开始编辑定时任务 输入 i 回车,开始编辑
然后在输入定时任务执行的时间点,我这边举例说明
*/1 * * * * /bin/sh /opt/openresty/nginx/cut_nginx_logs.sh
我这句话的意思是,每隔一分钟执行一次,然后是需要执行的脚本路径。
在这里插入图片描述
然后ESC退出, :wq 保存。保存以后,就可以退出了,此时对定时任务的修改就算生效了。然后重启定时任务服务 service crond restart。
此时,我们一个完成的linux系统定时任务就生效了。
我这边举例说明一下当中需要用到的命令:
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
crontab -l 查看系统中有哪些定时任务
crontab -r 删除定时任务
crontab -e 编辑定时任务

4.**重点来了,定时任务此时此刻并没有生效,这是为什么呢?**我这边检查了配置,也查看了定时任务是否创建成功,查看一切状态都是正常的,就是不生效。 然后,我观察到了一个细节,在命令界面会收到一条信息,告诉您,在哪个文件夹下面有新邮件,我按照上面指示,打开文件夹,找到root管理员文件
在这里插入图片描述
如果收不到邮件,说明被屏蔽了,可以开启 inet_protocols = all就行了,配置文件在
/etc/postfix/main.cf里面
详情参考链接https://blog.csdn.net/hitabc141592/article/details/25986911
我们查看邮件里面的内容,发现里面有错误信息,这怎么解决呢?
在这里插入图片描述
原来,在windows上编辑后再复制到linux中运行,Linux系统和Windows系统中换行符不同。此时vi文件可以发现有的行后面会有^M字符出现。
我们需要在服务器上安装只要安装dos2unix,用它对sh文件内容进行处理,这个问题就可以解决了。
yum install -y dos2unix
dos2unix /opt/openresty/nginx/cut_nginx_logs.sh

覆盖成功以后,我们重启定时任务即可service crond restart
**dos2unix命令:**实际上就是将windows编辑的文件中的0d0a(’\r\n’)换行符转换为linux中的0a(’\n’)。
在这里插入图片描述

同理:我们需要删除指定日期中备份的日志文件,放到脚本里面即可

find b a k p a t h / bakpath/ (date +%Y)/$(date +%m)/ -mtime +30 -name “*.log” -exec rm -rf {} ;

猜你喜欢

转载自blog.csdn.net/Z__Sheng/article/details/89520283