定时任务做日志分隔

上一篇文章说到想要实现使用nohup运行Java JAR文件并将输出重定向到按日期命名的日志文件可以采用定时任务,接下来给记录一下定时任务是怎么实现的

  • 第一步:写一个执行日志处理的shell

#!/bin/bash
# 指定要执行的文件夹路径
folders="写好路径,可以多个用空格分隔"
# 循环遍历每个文件夹,并执行其中的Shell脚本
date=$(date +"%Y-%m-%d %H-%M-%S")
echo "========================$date=============================="
for folder in $folders
do
    echo "执行文件夹: $folder"
    # 进入目标文件夹
    cd $folder
    # 执行Shell脚本
    ./logHandle.sh
    echo "执行完成。"
done
echo "========================$date=============================="

  • 第二步:日志处理shell

#!/bin/bash
#日志文件
source_file="日志文件的路径"

#年月目录名称

current_date=$(date +"%Y-%m")

#分割后的日志文件名称

file_name=$(date +"%Y-%m-%d")

#日期

data=$(date -d "yesterday" +%F)

target_dir="/home/自己定义的目录/$current_date"

#如果不存在生成对应目录

if [ ! -d "$target_dir" ]; then

    mkdir -p "$target_dir"

fi

#把日志分隔进对应日志文件,不存在就创建,存在及追加
if [ -f "$target_dir/$file_name.log" ]; then
  echo "file is exist"
  cat "$source_file" >> "$target_dir/$file_name.log"
else
  echo "file is not exist"
  cp "$source_file" "$target_dir/$file_name.log"
fi

if [ -f "$target_dir/$file_name.log"  ]; then

  source_size=$(stat -c "%s" "$source_file")
  target_size=$(stat -c "%s" "$target_dir/$file_name.log")

  if [ $target_size -ge $source_size ]; then
    echo "Log file successfully processed"
    > "$source_file"
  else
    echo "log processed failed"
  fi
else
  echo "Log processing failed"
fi
 

  • 第三步:创建定时任务并指定执行日志处理的shell
  1. 在服务器输入crontab -e命令来编辑cron表达式文件。

  2. 根据需要添加新的定时任务。每条定时任务应该包含五个字段,分别为分钟、小时、日期、月份和星期几。这些字段之间使用空格分隔。

    例如,下面的将在每天的8点运行指定的shell脚本:

    0 8 * * * /执行日志处理的shell全路径名称

  3. 保存并关闭文件后,cron将自动重载更改,从而生效新的定时任务。

  4. 若想查看已经创建的定时任务列表,可以使用crontab -l命令

  • 结尾

就这样通过简单的方式就可以实现分隔日志文件了

你可能感兴趣的:(java,linux,服务器,微服务)