Shell 常用来写一些自动化的工具,比如我们平时的应用产生的日志文件,在知道日志文件产生的规律之后,我们可以用linux命令轻易得到对应的日志文件位置,从而获取其中的日志数据,进而进行搬运处理,利用shell+crontab可以实现定时日志的搬运
准备工作
创建文件夹/shell/project/2022-08-27
,用来表示项目当天产生日志的文件夹,同时记得往文件夹中新建一些文件,表示日志数据
mkdir -p /shell/project/2022-08-27
cd /shell/project/2022-08-27
touch 2022-08-27.log
创建文件夹/shell/logs
,用来表示我们需要搬运到的目的文件夹
mkdir -p /shell/logs
搬运的命令
其实用linux命令,也可以简单地将文件移动到某个文件夹下,上面的准备工作无非可以写成以下命令:
mkdir /shell/logs/2022-08-27
cp /shell/project/2022-08-27/2022-08-27.log /shell/logs/2022-08-27
但是如果每天重复性地去做这个事情,就显得很机械化、繁琐了,有时候可能还会忘记,所以我们可以交给shell去做这个事情。
使用shell进行文件的搬运
我们可以先新建一个logs.sh
文件
cd /shell
touch logs.sh
思路:首先日志每天都会生成,所以我们需要知道当天所生成的日志目录的位置,这里可以用
date
命令去解决这个问题,同时,我们需要判断搬运到的目的地的文件夹是否存在,不存在则需要去创建它
编写 logs.sh
#!/bin/bash
# 项目路径
project_path="/shell/project/"
# 日志路径
log_path="/shell/logs/"
# 获取当前时间
date=$(date +"%Y-%m-%d")
# 今天的项目日志路径
project_path=$project_path$date
# 今天的日志路径
log_path=$log_path$date
# 判断项目日志文件是否存在
if [ -e $project_path ];
then
# 判断目标日志目录是否存在
if [ ! -e $log_path ];
then
mkdir -p $log_path
fi
# 复制文件到日志目录下
cp $project_path/* $log_path
fi
echo '移动完成'
测试:运行命令,并查看是否在/shell/logs/
下生成文件夹和文件
sh logs.sh
cd /shell/logs
ls
此时我们已经完成了shell脚本的编写,但是脚本此时还是人工去执行的一个情况,想要实现定时搬运的功能,还需要借助Linux的定时工具crontab
去实现
使用crontab实现任务的定时运行
crontab
语法
- 从左到右顺序依次为:分钟、小时、日期、月份、周、脚本、参数1、参数2…
- 比如每隔一分钟执行依次脚本:
*/1 * * * * /path/a.sh
开启crontab
crontab -e
比如我们想在凌晨2点收集日志,可以在打开的界面中输入以下内容,并保存退出
0 2 * * * /shell/logs.sh
以上,我们就完成了定时搬运日志的动作!