参考文档:www.cnblogs.com/bkyzc/p/176…
通过 nohup 命令启动应用后,默认会生成 nohup.out 的日志文件,而且这个文件会随着时间的推移变得越来越大,不但不方便查看,也没有办法直接删除。所以设定了如下目标
- 将日志按照日期进行分割
- 定期将指定日期前的日志进行删除
1. 创建 shell 脚本
1.1. 创建日志操作工具 log_tools.sh
## 脚本参数设置
# 参数设置
log_dir="$1" # 文件所在绝对目录
log_base_name="$2" # 待处理的文件名
log_suffix="$3" # .log 文件后缀名
op_date="$4" # +7 7天前
if [ -f "$log_dir/$log_base_name" ]; then
# 将当天生成的日志文件copy到备份文件中,并按照日期给备份文件命名
cp $log_dir/$log_base_name $log_dir/$log_base_name.`date -d yesterday +%Y-%m-%d`$log_suffix
# 清空默认文件
:> $log_dir/$log_base_name
fi
# 删除指定日期之前的日志
find $log_dir -mtime $op_date -name $log_base_name*$log_suffix | xargs rm -f
## 或者 find $log_dir -mtime $op_date -name $log_base_name*$log_suffix -exec rm -rf {} ;
### 说明
## log_dir 是日志文件所在的目录。
## -name "*.log" 表示匹配所有以.log结尾的文件。
## -mtime +10 表示修改时间超过10天的文件。
## -exec rm -f {} ; 对于每个匹配的文件,执行rm -f删除它。
## 确保在执行此命令前仔细检查,以防不小心删除重要文件。可以先运行不带-exec的命令来查看将要删除的文件列表
## 另外,如果文件数量非常多,可以使用xargs来避免-exec命令行长度问题
## find /path/to/logs -name "*.log" -mtime +10 | xargs rm -f
1.2. 创建工具使用脚本 clear_nacos_log.sh
以清除 nacos 日志为例
# 注意:脚本中的路径都必须使用角对路径,否则crontab执行时会出现问题
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/bin/logs access_log .log +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs config-pull-check.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs config-client-request.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs alipay-jraft.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs nacos.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs naming-performance.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs naming-raft.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs naming-push.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs naming-server.log .0 +7
sh /data/svc/sh/log_tools.sh /data/zb/soft/nacos/logs nacos-persistence.log .0 +7
1.3. 添加脚本执行权限
chmod u+x ./log_tools.sh
chmod u+x ./clear_nacos_log.sh
1.4. 使用脚本注意事项
1.4.1. 如果执行中出现如下错误:cp: cannot stat '/usr/local/'$'\r''/nohup.out': No such file or directory
是因为Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致运行错误。执行以下命令去除Shell脚本中的\r字符:sed -i 's/\r//' log.sh
1.4.2. 如果提示权限不足,执行以下命令增加权限
chmod 777 ./log.sh
chmod +x ./clear_nacos_log.sh // 添加执行权限
2. 设置定时任务执行脚本
- 配置定时任务
crontab -e # 打开定时任务编辑页面
crontab -l # 列出定时任务
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
- 添加定时任务,当有多个定时任务时,添加多行记录即可
0 0 * * * sh /data/svc/sh/clear_nacos_log.sh - 重启定时任务配置使用新增任务生效
systemctl restart crond.service
3. 测试脚本执行情况
bash -x ./log_tools.sh /data/soft/nacos/bin/logs access_log .log +15
脚本执行后会在控制台打印其中执行的文件,可以用来检查参数是否正常替换