用shell写一个日志轮巡脚本
时间: 2023-05-28 14:06:36 浏览: 72
以下是一个简单的日志轮巡脚本示例,它会检查指定目录中的日志文件,并对超过一定大小的文件进行备份和截断。
```bash
#!/bin/bash
# 日志目录
LOG_DIR="/var/log"
# 日志文件最大大小,单位为MB
MAX_SIZE=10
# 备份目录
BACKUP_DIR="/var/log/backup"
# 获取当前时间
DATE=$(date "+%Y%m%d%H%M%S")
# 遍历日志目录中的所有文件
for file in $LOG_DIR/*
do
# 判断是否为文件
if [[ -f $file ]]
then
# 获取文件大小
size=$(du -m "$file" | cut -f1)
# 如果文件大小超过最大限制,则备份并截断文件
if [[ $size -gt $MAX_SIZE ]]
then
# 备份文件
cp "$file" "$BACKUP_DIR/${file##*/}.$DATE"
# 截断文件
> "$file"
fi
fi
done
```
该脚本会在每次运行时检查指定目录中的所有日志文件,对超过一定大小的文件进行备份和截断。备份文件会以当前时间戳作为文件名,并保存在指定的备份目录中。截断后的文件将变为空文件,以便继续记录新的日志信息。
相关问题
使用Shell脚本写一个日志切割脚本
下面是一个使用Shell脚本实现日志切割的例子:
```bash
#!/bin/bash
LOG_FILE=/var/log/messages
BACKUP_DIR=/var/log/backup
while true
do
# 获取当前时间
current_time=$(date "+%Y-%m-%d-%H:%M:%S")
# 构造备份文件名
backup_file_name=messages_${current_time}.log
# 构造备份文件路径
backup_file_path=${BACKUP_DIR}/${backup_file_name}
# 判断备份文件夹是否存在,不存在则创建
if [ ! -d "${BACKUP_DIR}" ]; then
mkdir -p ${BACKUP_DIR}
fi
# 复制日志文件到备份文件中
cp ${LOG_FILE} ${backup_file_path}
# 清空日志文件
echo "" > ${LOG_FILE}
# 等待 1 小时再进行下一次备份
sleep 3600
done
```
这个脚本会将 `/var/log/messages` 文件每隔 1 小时备份一次,备份文件会按照当前时间命名,并存放在 `/var/log/backup` 目录下。同时,原来的日志文件也会被清空,以便于下一次备份。可以根据实际需求进行修改。
shell写一个nginx日志切割脚本
你好,我可以回答这个问题。以下是一个 shell 脚本,可以实现 nginx 日志的切割:
```
#!/bin/bash
# nginx 日志文件路径
log_path="/var/log/nginx/access.log"
# 切割后的日志文件名
log_name="access-$(date +%Y%m%d).log"
# 切割命令
mv $log_path $log_path.$log_name && kill -USR1 $(cat /run/nginx.pid)
# 删除 7 天前的日志文件
find /var/log/nginx/ -name "access-*.log" -mtime +7 -exec rm -f {} \;
```
这个脚本会将当前的 nginx 日志文件重命名为 `access-年月日.log` 的格式,并重新生成一个新的日志文件。同时,它会删除 7 天前的日志文件,以保持磁盘空间的合理使用。
希望这个脚本能够帮助到你。