写一个nginx日志切割shell脚本,保留30天的文件
时间: 2024-02-01 07:02:49 浏览: 87
好的,以下是答案:
您可以使用以下Shell命令编写一个nginx日志切割脚本,以保留30天的文件:
```shell
#!/bin/bash
LOG_DIR=/var/log/nginx
OLDLOG_DIR=/var/log/nginx/oldlogs
COMPRESSION_TOOL='gzip'
find ${LOG_DIR} -type f -iname "access.log*" -mtime +29 -delete
mv ${LOG_DIR}/access.log ${OLDLOG_DIR}/access-$(date +%Y%m%d%H%M%S).log
kill -USR1 $(cat /var/run/nginx.pid)
cd ${OLDLOG_DIR}
for i in $(ls -1 access*log); do
${COMPRESSION_TOOL} $i
done
```
这个脚本将删除30天前的所有访问日志文件并将当前的访问日志文件从`${LOG_DIR}/access.log`移动到`${OLDLOG_DIR}`,并触发Nginx重新打开日志文件。随后,它将所有已轮换的日志文件压缩。
相关问题
写一个nginx日志切割shell脚本,保留30天的文件,并加入定时任务
好的,您可以参考以下Shell脚本,用于实现nginx日志切割并保留30天的文件,并加入定时任务:
```bash
#!/bin/bash
# nginx日志目录
log_dir="/var/log/nginx/"
# 日志文件名称
log_file="access.log"
# 备份目录
backup_dir="${log_dir}backup/"
# 当前日期和时间
datestr=`date '+%Y-%m-%d-%H-%M-%S'`
# nginx主进程pid文件
pid_file="/var/run/nginx.pid"
# 判断nginx主进程是否在运行
if [ ! -e ${pid_file} ]; then
echo "nginx主进程未运行!"
exit 1
fi
# 切割日志文件
cd ${log_dir}
mv ${log_file} "${backup_dir}${log_file}.${datestr}"
kill -USR1 `cat ${pid_file}`
# 删除30天之前的备份文件
find ${backup_dir} -name "${log_file}.*" -mtime +30 -exec rm {} \;
```
然后,您可以将此脚本添加到定时任务中,以每天执行一次。例如,您可以在终端输入以下命令:
```bash
crontab -e
```
然后在打开的文件中添加以下行:
```bash
0 0 * * * /path/to/script/nginx_log_rotate.sh
```
这将在每天午夜执行 `nginx_log_rotate.sh` 脚本。
阅读全文