用shell脚本写一个log日记,当程序出现异常则记录下来记录时间以及问题,超过七天后自动删除最前的一天进行覆盖显示
时间: 2024-03-05 21:47:33 浏览: 55
好的,我可以帮你写一个 shell 脚本实现这个功能。首先,我们需要确定一下日志的存储位置和命名格式。假设我们将日志文件命名为 `mylog_YYYYMMDD.log`,其中 `YYYYMMDD` 表示日期,如 `mylog_20210824.log` 表示 2021 年 8 月 24 日的日志文件。我们将日志文件存储在 `/var/log` 目录下。
接下来,我们可以编写如下的 shell 脚本:
```bash
#!/bin/bash
LOG_DIR=/var/log
LOG_FILE=mylog_$(date +%Y%m%d).log
MAX_AGE=7 # 日志最大保留天数
# 检查日志目录是否存在,不存在则创建
if [ ! -d "$LOG_DIR" ]; then
mkdir -p "$LOG_DIR"
fi
# 检查日志文件是否存在,不存在则创建
if [ ! -f "$LOG_DIR/$LOG_FILE" ]; then
touch "$LOG_DIR/$LOG_FILE"
fi
# 记录日志函数,接受一个参数为日志内容
log() {
echo "$(date +'%Y-%m-%d %H:%M:%S') $1" >> "$LOG_DIR/$LOG_FILE"
}
# 模拟程序异常
if [ $((RANDOM % 2)) -eq 0 ]; then
log "something goes wrong"
fi
# 删除过期日志文件
find "$LOG_DIR" -type f -name "mylog_*" -mtime +$MAX_AGE -delete
```
这个脚本的主要逻辑如下:
1. 检查日志目录是否存在,不存在则创建。
2. 检查今天的日志文件是否存在,不存在则创建。
3. 定义了一个 `log()` 函数,接受一个参数为日志内容,会将日志内容和当前时间写入日志文件。
4. 模拟程序异常,如果随机数为偶数,则记录一条日志。
5. 使用 `find` 命令查找日志目录下所有名字为 `mylog_*` 的文件,且最后修改时间超过 `$MAX_AGE` 天的文件,然后将其删除。
你可以将这个脚本保存为 `log.sh`,然后通过 `chmod +x log.sh` 命令给它添加执行权限,最后使用 `./log.sh` 命令运行它。每次运行时,它都会检查今天的日志文件是否存在,如果不存在则会自动创建。如果程序出现异常,则会记录一条日志。每次运行还会删除过期的日志文件,保证日志文件不会无限增长。
阅读全文