本例以我当前Centos Linux服务器文件目录信息为准,看官请自行替换自己的目录及文件
#!/bin/bash
# 备份php-fpm 及 web的日志
# 今天的日期
#file_date=$(date +"%Y%m%d")
# 昨天的日期
file_date=$(date -d"1 day ago" +"%Y%m%d")
# php log的路径
log_path_php=/usr/local/php/var/log/
# web log的路径
log_path_web=/data/wwwlogs/
# 备份目录
back_path=/data/wwwlogs/
# =================== 备份php log ========================
mv ${log_path_php}php-fpm.log ${back_path}${log_path_php}php-fpm.log_${file_date}
mv ${log_path_php}slow.log ${back_path}${log_path_php}slow.log_${file_date}
# 主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的。
# 原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样操作导致日志切割失败
kill -USR1 `ps axu | grep "php-fpm: master process" | grep -v grep | awk '{print $2}'`
# =================== 备份web log ========================
# 访问日志文件名格式为 xx_acc.log;错误日志文件名格式为 xx_err.log
# 通过循环自动备份不同网站的日志文件
cd ${log_path_web}
for file in $(ls *_acc.log);
do
mv ${file}{,_$file_date}
done
# 向nginx主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样
操作导致日志切割失败
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
- 将代码保存到/root/cut_logs.sh
- 执行chmod +x /root/cut_logs.sh
- 使用命令 crontab -e 添加到计划任务,每天0点0分执行
0 0 * * * /root/cut_logs.sh