文章目录

  • 1、 准备工作
  • 2、 脚本实现
    • 2.1 执行命令准备
    • 2.2、Linux 下创建定时任务-crontab
      • 2.2.1、crontab 常用命令
      • 2.2.2 命令行操作
  • 3、附甜点
    • cron校验在线工具: https://tool.lu/crontab/
    • cron Linux上的表达式说明
    • SpringBoot下cron表达式使用

SpringBoot项目,日志不再写在数据库里,而是写在服务器的日志文件中,这样项目初期没有问题,但是时间久了就会导致服务器上的日志文件越来越多,内存占用也越来越大,这样肯定不行!人工维护?No!这里提供一个简单粗暴的解决方式,即利用 Linux 的 crontab 定时任务来实现,当练手了。

  1. 定时备份当前 console.log 日志文件
  2. 清空当前 console.log 日志文件内容
  3. 定时清理 console.log 备份日志文件
  4. 定时清理 log-info.log 备份日志文件

1、 准备工作

先了解下此文 demo 项目的文件目录结构,大家后续根据需要适当调整脚本即可。 我这个项目是一个简单的 springboot 项目,没有结合 ES、kafka 等做日志平台处理。

  • sh 文件维护在:/home/deploy/logdeal-task.sh
  • 日志文件根:/home/logs/gemp-data,如图
  • 重点:这里说明一下这些日志文件含义
    • console.log: 是服务器启动命令 /home/deploy/gemp-data.sh 中将日志都打印到了这里,类似 nohup.out、catalina.out等。
    • log_info.log:程序中 info 级别的日志
    • /info 目录:是对 log_info.log 的备份,这个机制在 SpringBoot 的 logbak.xml 中实现的。并且在备份后会自动清理当前 log_info.log
    • /bak目录: 是这里我对 console.log 的备份目录,与 /info 区别在于,console.log 我需要手动清理一下。

2、 脚本实现

2.1 执行命令准备

  • 创建文件:touch /home/deploy/logdeal-task.sh
  • 授权(日志任务如果没有权限也需要授权一下):chmod +x logdeal-task.sh
  • 编辑操作命令
    1. 定时备份当前 console.log 日志文件
    2. 清空当前 console.log 日志文件内容
    3. 定时清理 console.log 备份日志文件
    4. 定时清理 log-info.log 备份日志文件——》这一步不做也可以,因为 logback.xml 中也能实现自动清理,如
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
#!/bin/sh
# 备份 console.log ——> 清空当前 console.log 内容 ——> 清理 bak 下的 n 天前的 console.log 备份文件——> 清理info下的 n 天前的日志文件# 先备份console.log日志文件, 如果是其他的,参考改下名字即可
mkdir /home/logs/gemp-data/bak
cp -r /home/logs/gemp-data/console.log /home/logs/gemp-data/bak/$(date +%Y%m%d).log# 清空当前 console.log,释放空间
cat /dev/null > /home/logs/gemp-data/console.log# 清理15天前的console.log日志文
find /home/logs/gemp-data/bak/ -name "*.log" -mtime +15 -exec rm -rf {} \;# 清理15天前的log-info.log日志文
find /home/logs/gemp-data/info/ -name "*.log" -mtime +15 -exec rm -rf {} \;

2.2、Linux 下创建定时任务-crontab

2.2.1、crontab 常用命令

-e #编辑定时任务
-l #查看定时任务
-r #删除定时任务
-u #指定其他用户

2.2.2 命令行操作

  • crontab -e
  • 输入i回车,输入下面命令,每天凌晨4点01分执行【也可以直接编辑:/var/spool/cron】
01 04 * * * /home/deploy/logdeal-task.sh >/dev/null 2>&1
  • 每隔1分钟执行一次可以这样写
  /1 * * * * /home/deploy/logdeal-task.sh >/dev/null 2>&1
  • 输入 ESC 然后输入 :wq 保存
  • 重启crond服务
 service crond restart
  • 查看任务【也可以直接到 /var/spool/cron 下查看】:
crontab -l
  • 查看日志 /var/log 文件中
 tail -f /var/log/cron

3、附甜点

cron校验在线工具: https://tool.lu/crontab/

cron Linux上的表达式说明

SpringBoot下cron表达式使用

@Scheduled 注解也支持 cron 表达式,可以非常丰富的描述定时任务的时间。cron 表达式格式如下:
[秒] [分] [小时] [日] [月] [周] [年]
通配符含义:

  1. “?” 表示不指定值,即不关心某个字段的取值时使用。需要注意的是,月份中的日期和星期可能会起冲突,因此在配置时这两个得有一个是 ?
  2. “*” 表示所有值,例如:在秒的字段上设置 *,表示每一秒都会触发
  3. “,” 用来分开多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
  4. “-” 表示区间,例如在秒上设置 “10-12”,表示 10,11,12秒都会触发
  5. “/” 用于递增触发,如在秒上面设置”5/15” 表示从5秒开始,每增15秒触发(5,20,35,50)
  6. “##” 序号(表示每月的第几个周几),例如在周字段上设置”6##3”表示在每月的第三个周六,(用 在母亲节和父亲节再合适不过了)
  7. 周字段的设置,若使用英文字母是不区分大小写的 ,即 MON 与mon相同
  8. “L” 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会自动判断是否是润年), 在周字段上表示星期六,相当于”7”或”SAT”(注意周日算是第一天)。如果在”L”前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L”这样的格式,则表示”本月最后一个星期五”
  9. “W” 表示离指定日期的最近工作日(周一至周五),例如在日字段上设置”15W”,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发,如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 “1W”,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,”W”前只能设置具体的数字,不允许区间”-“)
  10. L 和 W 可以一组合使用。如果在日字段上设置”LW”,则表示在本月的最后一个工作日触发(一般指发工资 )

Linux服务器定时清理日志文件、Linux cron定时任务相关推荐

  1. linux配置定时删除日志文件,Linux使用shell脚本定时删除历史日志文件

    Linux使用shell脚本定时删除历史日志文件,文件,小时,时间,目录,脚本 Linux使用shell脚本定时删除历史日志文件 易采站长站,站长之家为您整理了Linux使用shell脚本定时删除历史 ...

  2. Linux脚本定时清理日志任务

    定时清理日志任务 前言 一.定时清理简述 1.1查看/etc/crontab文件 1.2 删除文件命令 1.3 给脚本添加权限: 1.4 将脚本添加到定时任务 2.计划任务 2.1创建shell 2. ...

  3. linux查看mysql连接日志文件,linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  4. Linux使用Shell定时清理日志文件

    ①根据进程名查找ProxyPoolRMIImpl进程,找到关联进程PID,终止这些进程. ②删除该进程产生的日志文件. ③重启服务 #!/bin/sh webproxy_id=`ps -ef|grep ...

  5. linux系统服务器怎么登录日志文件,Linux服务器查看日志的几种方法

    Linux服务器查看日志的几种方法 1.进入文件所在件目录,比 cd /opt/tomcat7/logs 2.命令日志,分析需求场景打开需要的日志 比如: tail  -f   catalina.ou ...

  6. 服务器日志文件已被清除恢复,Linux服务器入侵后日志文件删除/恢复方法

    当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹.管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志.有时可以通过lsof来恢复这些 ...

  7. linux下定时清理日志任务

    1.创建定时清除日志脚本(/usr/local目录下) mkdir scriptTask  创建脚本文件夹,存放所有的脚本 在scriptTask 目录下创建脚本 find 对应目录 -mtime + ...

  8. 银河麒麟V10系统 syslog和kern.log文件过大问题解决,定时清理日志文件

    文章目录 1. 新建clear_log.sh脚本文件 2. 设置cron任务 3. 解决不执行的方法 需求: 在使用银河麒麟V10系统时,/var/log/kern.log 和 /var/log/sy ...

  9. linux 启动 不打印日志文件,Linux nohup不输出日志文件的方法

    最近在Linux上部署视频流推送应用时,由于网络不稳定等原因程序会不断的输出错误信息,结果导致程序运行一天下来日志文件直接占满磁盘,解决方法就是不再输出日志文件,命令如下: 只输出错误信息到日志文件: ...

最新文章

  1. 结对编程项目作业-设计文档
  2. Servlet--生命周期
  3. 两个二进制数异或的结果
  4. 《我也能做CTO之.程序员职业规划》 水准之上,期望以下
  5. NOI数据结构:后缀数组
  6. 游戏计算获胜概率_伟大的命令行挑战赛的获胜者宣布
  7. 见过一个一个拉新地推没见过这么多一起推
  8. 怎么设置php 中小窗口浮动,CSS_闭合浮动元素超级简单的方法,无意中看到的一个非常不错的 - phpStudy...
  9. 【结巴分词】浅谈结巴分词算法原理
  10. MFC中让自定义的类能响应消息
  11. 装饰者模式(C#)实现
  12. 光谱数据处理及定量分析
  13. TextView属性总结,简单的控件也可以很复杂
  14. Multisim仿真实验——小信号调谐放大器
  15. 3000字长文:探讨报销系统使用满意度的NPS指标设计
  16. Word写论文及PPT画论文图的经验总结
  17. Excel定义函数自动填充
  18. 规划--如何成为一名web安全工程师
  19. 用Cocos Creator 模拟书本翻页效果
  20. 拼多多产品怎么引流?拼多多商品怎么引更多的流量?

热门文章

  1. 高斯分解LU矩阵之MATLAB实现
  2. 激光枪真的能杀人于无形吗?
  3. HTML中的几种定位方式
  4. Android音视频开发(三)——MediaExtractor和MediaMuxer的使用
  5. KAV6导致部分程序崩溃的解决办法(kernel32.dll相关)
  6. 我在深圳300元月薪的小资生活(强人)
  7. linux下rename命令用法详解(重命名文件)
  8. 上海交通大学python教材答案-上海交通大学-SPOC官方网站
  9. js原型和原型链的理解(透彻)
  10. window查看服务器占用内存,windows资源管理器占用内存大