上一篇文章说到想要实现使用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"
fiif [ -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
-
在服务器输入
crontab -e
命令来编辑cron表达式文件。 -
根据需要添加新的定时任务。每条定时任务应该包含五个字段,分别为分钟、小时、日期、月份和星期几。这些字段之间使用空格分隔。
例如,下面的将在每天的8点运行指定的shell脚本:
执行日志处理的shell全路径名称0 8 * * * /
-
保存并关闭文件后,cron将自动重载更改,从而生效新的定时任务。
-
若想查看已经创建的定时任务列表,可以使用
crontab -l
命令
-
结尾
就这样通过简单的方式就可以实现分隔日志文件了