Bootstrap

liunx 上使用脚本定时清理日志

这里我们先知道怎么清空日志,

然后在动手设置一个定时任务(可能操作完会不知道相关命令的作用),

所以第三步就是说明一下相关的命令,

最后一步来两个案例助力理解。希望文章对你有所帮助!

1、清空日志的方式

cat /dev/null > test.log

cp /dev/null filename.out

> test.log

以上三种命令的方式都是一样的,用来达到清空日志文件的目的。

2、定时任务

既然我们是要定时清理日志,那么我们就需要先了解定时任务。

这里先使用一遍,下面有相关命令解释。

创建脚本文件 test.sh

touch test.sh

默认创建的这个sh问件是没有执行权限的,修改权限

chmod 777 test.sh

设置crontab定时任务 ,即可完成定时执行脚本的设置。

# 打开定时任务配置文件
crontab -e

# 定时调用test.sh
* * * * * /sambashare/test.sh

备注:

  定时任务需要crond服务的支持
    1.启动方法  service crond restart
    2.该服务默认是开机启动的
  取消定时任务
    1.全部取消 crontab -r
    2.取消某个 crontab -e 配置文件,删除要取消的哪一行配置
  查看目前都有那些定时任务
    crontab -l

定时规则的说明:

* * * * * /sambashare/test.sh

第一个*        一小时当中的第几分钟      0-59
第二个*        一天当中的第几小时          0-23
第三个*        一个月当中的第几天          1-31
第四个*        一年当中的第几月              1-12
第五个*        一周当中的星期几              0-7(0和7都代表周日)

*        代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
,        代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行
-        代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
*/n     代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次

以下举几个案例方便理解:

45 22 * * *    
在22点45分执行

0 17 * * 1     
在每周1的17点0分执行

0 5 1,15 * *  
在每月1号和15号的凌晨5点0分执行

40 4 * * 1-5  
在每周一到周五的凌晨4点40分执行

*/10 4 * * *    
在每天的凌晨4点,每隔10分钟执行一次

0 0 1,15 * 1  
每月1号和15号,每周1的0点0分都会执行
  

注意:星期几和几号最好不要同时出现,他们的意义都是天,容易混淆

3、crond 服务的相关命令

service crond start //启动服务 
service crond stop //关闭服务 
service crond restart //重启服务 
service crond reload //重新载入配置

查看crontab服务状态:service crond status 
手动启动crontab服务:service crond start 

查看crontab服务是否已设置为开机启动,执行命令:ntsysv 
加入开机自动启动: 
chkconfig –level 35 crond on

也可以用设置开机自动启动crond服务: 

chkconfig crond on 

 查看各个开机级别的crond服务运行情况 
chkconfig –list crond 
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 
可以看到2、3、4、5级别开机会自动启动crond服务 


取消开机自动启动crond服务: 

chkconfig crond off

新增调度任务可用两种方法:

1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

2、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。 

注意:方式1 是针对某个用户的,而方式2是针对系统的任务

查看调度任务

-- 列出当前的所有调度任务 
crontab -l

-- 列出用户jp的所有调度任务
crontab -l -u jp

删除任务调度工作

-- 删除所有任务调度工作 
crontab -r

-- 或者直接编辑  /etc/crontab
vim /etc/crontab

4、清理 java应用 的日志

# 定义目录
dir=/home

# 应用
javaLogDir=/logs

# 存放日志的目录
debugDir=/debug
errorDir=/error
infoDir=/info
warnDir=/warn

# 定义项目名
# 应用服务
jarName=xxx

find $dir/$javaLogDir/$jarName/$debugDir -mtime +1 -name "*.log" -exec rm -rf {} \;
find $dir/$javaLogDir/$jarName/$errorDir -mtime +1 -name "*.log" -exec rm -rf {} \;
find $dir/$javaLogDir/$jarName/$infoDir -mtime +1 -name "*.log" -exec rm -rf {} \;
find $dir/$javaLogDir/$jarName/$warnDir -mtime +1 -name "*.log" -exec rm -rf {} \;

参数说明:

find:linux的查找命令,用户查找指定条件的文件;

$dir/javaLogDir/$jarName:是日志文件所在目录;

-mtime:标准语句写法;

+1:查找1天前的文件,这里用数字代表天数;

"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以自由运用;

-exec:固定写法;

rm -rf:强制删除文件,包括目录;

{} \; :固定写法,一对大括号+空格+\+;

上面的写法是否感觉很多,debug、info等都需要写上,那么可以用下面的方式:

# 定义目录
dir=/home

# 应用
javaLogDir=/logs


# 清理应用日志
find $dir/$javaLogDir -mtime +1 -name "csp-*.log" -exec rm -rf {} \;

注意:此方式是查询到日志文件,然后进行删除。

或者如以下写法:

echo "======== start clean logs ========"
logs=$(find /logsDir/ -name *.log)
for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean logs ========"

查询到 logsDir 下的后缀为 .log 的文件,并清空文件。

;