shell日志切割
时间: 2023-06-28 09:04:45 浏览: 125
为了防止日志文件过大,需要定期进行日志切割。Shell脚本可以实现日志的定时切割,以下是一个简单的示例:
```
#!/bin/bash
LOG_DIR="/var/log"
LOG_FILE="app.log"
BACKUP_DIR="/var/log/backup"
# 判断备份目录是否存在,如果不存在则创建
if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi
# 重命名日志文件,备份到备份目录中
mv $LOG_DIR/$LOG_FILE $BACKUP_DIR/$LOG_FILE.$(date +%Y%m%d-%H%M%S)
# 创建新的日志文件
touch $LOG_DIR/$LOG_FILE
# 执行完毕,退出脚本
exit 0
```
在这个脚本中,`LOG_DIR` 变量指定了日志文件所在的目录,`LOG_FILE` 变量指定了日志文件的名称,`BACKUP_DIR` 变量指定了备份目录的路径。
脚本首先判断备份目录是否存在,如果不存在则创建。然后,它将当前的日志文件重命名为一个时间戳后缀的文件,并将它备份到备份目录中。接着,它创建一个新的空日志文件,以便应用程序可以继续写入日志。
最后,脚本退出。
可以使用 cron 定时任务来执行这个脚本,例如:
```
0 0 * * * /path/to/logrotate.sh
```
这个 cron 表达式将在每天凌晨执行日志切割操作。
相关问题
shell按日志大小切割日志
可以使用Linux系统中自带的Logrotate工具来实现按日志大小切割日志。
Logrotate是一个日志文件管理工具,它可以周期性地检查、分析、压缩和删除日志文件。这个工具可以通过配置文件来实现对日志文件的管理。
以下是一个示例配置文件,你可以根据需要进行修改:
```
/path/to/log/file.log {
rotate 7 # 保留最近7个日志文件
daily # 每天执行一次日志轮转
missingok # 如果文件不存在也不报错
notifempty # 如果文件为空也不轮转
copytruncate # 复制并截断原始日志文件,防止日志写入被中断
compress # 压缩轮转后的日志文件
delaycompress # 压缩上一次轮转后的日志文件
size 100M # 超过100M时进行轮转
}
```
上面的配置文件将指定`/path/to/log/file.log`文件按照每天进行轮转,保留最近7个日志文件,如果文件不存在或者文件为空也不报错,同时在复制原始日志文件时进行截断,防止日志写入被中断,压缩轮转后的日志文件,延迟压缩上一次轮转后的日志文件,并且当日志文件大小超过100M时进行轮转。
将上面的配置文件保存为`/etc/logrotate.d/mylog`,然后执行以下命令来测试轮转:
```
logrotate -d /etc/logrotate.d/mylog
```
如果一切正常,执行以下命令来进行轮转:
```
logrotate -f /etc/logrotate.d/mylog
```
Logrotate工具还可以实现其他功能,你可以查看其官方文档来了解更多信息。
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 天前的日志文件,以保持磁盘空间的合理使用。
希望这个脚本能够帮助到你。
阅读全文