shell实例利用crontab自动清除日志
shell实例利用crontab自动清除日志
程序运行会产生很多的日志,对于无用的日志手动删除比价麻烦,写一个自动执行的命令是很有必要的。
删除文件shell命令
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
具体的命令如下:
find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;
参数及说明:
整句的作用是将 /mnt/tomcat/logs/目录下所有30天前带".log"的文件删除。
find:linux的查找命令,定位文件夹;
/mnt/tomcat/logs/:需要清理的目录;
-mtime:语法结构,固定写法;
+30:天数;
"*.log":*是匹配所有,整个是匹配所有的后缀为.log的文件;
-exec:语法结构,固定写法;
rm -rf:强制循环删除文件,及文件夹;
{} \; :语法结构,固定写法;
crontab计划任务使用
创建脚本文件:
#vi del-log.sh
切换到insert模式输入:
#!/bin/sh
find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;
授权:
chmod +x del-log.sh
增加系统计划任务:
crontab -e
11 11 * * * /mnt/tomcat/logs/del-log.sh >/dev/null 2>&1
这样每天11点11分系统就自动执行del-log.sh文件,即执行find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;语句,来对日志文件进行清理。
其他自动清除日志脚本
- #!/bin/sh
- ###########################
- #delete log blog.duplicatedcode.com
- # in_day_num: like 1 2 is delete 2day ago logs
- # in_log_path like tomcat log home
- ###########################
- in_log_path=${1}
- in_day_num=${2}
- tmp_delete_log=/var/log/deletelog/"`date +%Y%m`.log"
- deleteLog()
- {
- inner_num=${1}
- #find log
- echo "[`date`] >> start delete logs---" >> $tmp_delete_log
- find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf
- echo "[`date`] >> end delete logs---" >> $tmp_delete_log
- }
- init()
- {
- mkdir -p /var/log/deletelog/
- }
- main()
- {
- init
- if [ -z ${in_log_path} ]; then
- echo "[`date`] >> error log_path not init---" >> $tmp_delete_log
- return
- fi
- inner_day_num=+7
- if [[ -n ${in_day_num} ]] && [[ ${in_day_num} -ge 1 ]] ; then
- ${inner_day_num}=${in_day_num}
- else
- ${inner_day_num}="+"${in_day_num}
- fi
- deleteLog ${inner_day_num}
- }
- #first run main
- main
其中可输入日志所在目录和删除时间(如数字1代表1天前),find -type f -print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的反应,如果不做处理结合xargs 进行删除操作,会有影响,所以需要增加-print0用 null来作为边界符号,才敢结合 xargs -0来格式化输入。使用find 的时候 遵循最小结果集原则,find解析式从左到右,所有确保你在最左边的过滤符号能够过滤最大数据。
该脚本可结合crontab进行自动部署清理日志,在/var/log/deltelog/ 生成按照月的清理日志记录。
Linux下自动清理/tmp文件夹的原理
Linux系统中/tmp文件夹里面的文件会被清空,至于多长时间被清空,如何清空的?
在linux中tmpwatch命令的作用是删除一段时间内不使用的文件(removes files which haven’t been accessed for a period of time),在/etc/cron.daily/tmpwatc的计划任务中:
- #! /bin/sh
- flags=-umc
- /usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
- -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
- -X '/tmp/hsperfdata_*' 10d /tmp
- /usr/sbin/tmpwatch "$flags" 30d /var/tmp
- for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
- if [ -d "$d" ]; then
- /usr/sbin/tmpwatch "$flags" -f 30d "$d"
- fi
- done
tmpwatch参数:
-a或–all 删除任何类型的文件。
-m或–mtime 根据文件被更改时间
-c或–ctime 根据文件更改状态时间
-M或–dirtime 根据文件夹被更改时间
-f或–force 强制删除文件或目录,其效果类似rm指令的”-f”参数。
-l 不删除符号链接
-U或–exclude-user=用户名或uid 排除某用户的文件
-x 或–exclude=path 排除某路径
-X 或–exclude-pattern=pattern 排除某规则下的路径
-q或–quiet 不显示指令执行过程。
-v或–verbose 详细显示指令执行过程。
-test 仅作测试,并不真的删除文件或目录。
第一行相当于一些标记(参数),第二行就是针对/tmp目录里面排除的目录,第三行,这是对这个/tmp目录的清理。
/usr/sbin/tmpwatch "$flags" 30d /var/tmp中30d是30天,系统自动清理/tmp文件夹的默认时限是30天,决定了30天清理/tmp下不访问的文件,若想一天一清理的话,把30d改成1d。
如果你设置更短的时间来清理的话,比如说是30分钟、10秒等,在这个文件中设置后,reboot后时间到了也不清理/tmp文件夹里面的内容,因为tmpwatch所在的位置是/etc/cron.daily/目录下,而这个目录是每天执行一次计划任务,所以就不起作用了。
总结
(1)crontab定时任务在文件清理方面又很大的应用,可以设置关机任务、启动脚本和一些程序的检测操作。
(2)清除日志可采用cat /dev/null > /var/lig/messages,可以防止rm -f导致的程序已经打开文件句柄无法正确释放日志文件和写入、文件显示磁盘空间未释放等问题。
shell实例利用crontab自动清除日志的更多相关文章
- 利用python自动清除Android工程中的多余资源
我们直接在公司项目中使用,效果良好! 分享出脚本代码,希望对Android研发的同学有帮助. 提示,初学python,开发环境是Sublime Text 2,直接Ctrl+B的,其他环境下没调试过.应 ...
- Rails -- 自动清除日志
在开发模式中,开发环境日志会越来越大,所以需要设置自动清理,省内存. 在 config/initializers中新建一个文件 clear_blog.rb 编写如下代码 if Rails.env.de ...
- 利用crontab自动更新SVN代码
shell.sh#!/bin/sh source ~/.bash_profile LANG=en_US.UTF- cd /opt/web/hzcms/ svn up >> /opt/web ...
- 利用shell脚本实现nginx 的logs日志分割
Nginx 是一个非常轻量的 Web 服务器,体积小.性能高.速度快等诸多优点.但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量 ...
- SQL2005自动备份,定期删除的维护计划及自动定期清除日志
作为一名DBA,他们最常见的日常任务是: 1)定期完成数据库的完全备份或差异备份.2)定期清理备份文件,因为存储空间有限,可能只需要保存一个时期段内的文件(比如一周内或一月内). 而如何做到这两点呢? ...
- Linux下自动清除MySQL日志文件
MySQL运行过程中会生成大量的日志文件,占用不少空间,修改my.cnf文件配置bin-log过期时间,在Linux下自动清除MySQL日志文件 [mysqld] expire-logs-days= ...
- shell清除日志小脚本
#!/bin/bash #清除日志脚本 LOG_DIR=/var/log ROOT_UID=0 #用户id为0的 ,即为root if [ "$UID" -ne "$RO ...
- (转)shell实例手册
原文地址:http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9 实在是太好的资料了,不得不转 shell实例手册 0说明{ 手册制 ...
- shell 实例
转载自:https://github.com/liquanzhou/ops_doc 这里只作为笔记使用,不做他用 shell实例手册 0 说明{ 手册制作: 雪松 更新日期: 2018-09-1 ...
随机推荐
- 写一个小CTF平台
0x00.前言 协会要举办信息安全大赛了,初赛的web+crypto+misc主要由我来出题,注册.比赛的平台也都要由我来写 上周日完成了注册页面的后端(前端由另一个女生写的),前天下午大概完成 ...
- Linux /etc/hosts文件
均为转载 ———————— 1.主机名: 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号. 公网:IP地址不方便记忆,所以 ...
- Python中日期和时间格式化输出的方法
本文转自:https://www.jb51.net/article/62518.htm 本文实例总结了python中日期和时间格式化输出的方法.分享给大家供大家参考.具体分析如下: python格式化 ...
- spring的事务操作(重点)
这篇文章一起来回顾复习下spring的事务操作.事务是spring的重点, 也是面试的必问知识点之一. 说来这次面试期间,也问到了我,由于平时用到的比较少,也没有关注过这一块的东西,所以回答的不是特别 ...
- .Net圈子里的一些看法
金三银四招聘季,不一定一定要跳巢,但是出去看看行情还是有必要的,所以就有这篇随笔. 首先,这里说的.Net圈子是只两个方面 第一,技术人才,属于人的圈子 第二,技术本身,技术的圈子,也就是技术所涵盖的 ...
- axios POST提交数据的三种请求方式写法
1.Content-Type: application/json import axios from 'axios' let data = {"code":"1234&q ...
- 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程
参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...
- JS判断一个数组中有无重复元素(数字)
前段时间遇到了这个问题 也百度了很多 不过还是用自己的方法解决了 一个超级简单的方法 简单到令人发指 由于直接写文本太丑了 所以还是截图吧 嘻嘻嘻 假如有一个这样的数组 (这是假如 可能每个人的数据 ...
- Vue中观察者模式的实现
Vue中实现观察者模式的方法可以有三种: 1.v-on方法 exp: <div id='test'> <button v-on:event='functionName'>but ...
- oracle异机恢复参考官方文档
How to use Rman Duplicate on ASM/RAC/OMF/Single Instance (Doc ID 840647.1) How to perform Rman dupli ...