这里我们先知道怎么清空日志,
然后在动手设置一个定时任务(可能操作完会不知道相关命令的作用),
所以第三步就是说明一下相关的命令,
最后一步来两个案例助力理解。希望文章对你有所帮助!
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 的文件,并清空文件。