zoukankan      html  css  js  c++  java
  • Linux 定时清除日志 Log

    一、原因

         写这篇的原因是项目中log没有定时清除,服务器上项目是用脚本启动,log文件只会在启动时生成一次,这时,由于项目在不断运行中,导致log越来越大。如果删除log文件,还得把项目停掉在启动,这样显然是不行的,而如果直接删掉log文件的话,后续的操作不会输出,也没有日志文件生成,这时就只能通过写个脚本定时去清除日志(每日一清)。     

    二、方法

        这时我想的肯定是希望能写一个脚本把这些日志清除掉,但不是删除掉。那么现在需要实现3步:

             1.找到项目的log的位置

             2.清除log内容

             3.定时执行脚本

       有了思路,查找了资料后,找到了几个相关的命令: 

         find . -name 'p.*.log'

         .:具体目录下,建议最好写出查询的具体的目录,类似,/var/local/  

          'p*.log':模糊查询p开头.log结尾的文件

        find /var/local/ -name 'p*.log' -type f -print :将符合的文件打印出来:

       

       找到了log文件后这时我们只需要清除就好了:

       find -name -exec  command:find的常用命令结构中有这样一条,具体的可以自行去百度。

       清除文件的命令:

       truncate -s 0 aa.txt {} ;        : 切记,这里的“;”号不能省略, 意思是将aa.txt的大小变成0M,即把aa.txt的内容清空了。百度truncate的用法。

       rm -rf/-r  xxx   :这个是删除文件或文件夹,不能达到我的要求

       结合上面的命令,就有了如下这样一条:

        find /var/local/ -name 'p*.log' -type f -print -exec truncate -s 0 {} ;            : 将符合这样一个条件的文件查到出来并赋予它0M的大小。

      下面我们就可以清除日志的脚本了,如何写就不讲了:

                                                                                                       

     1 #!/bin/bash
     2 
     3 status(){
     4   date 
     5   find /var/local/ -name 'p*.log' -type f -print -exec truncate -s 0 {} ;
     6   echo "清空log成功"
     7   return
     8 }
     9 
    10 case "$1" in 
    11     status)
    12         status;;*)
    13             echo "清除失败"
    14 esac

     

    四、定时任务

        常用命令:

       crontab -l    :查看定时任务

       crontab -e    :添加任务

       crontab -r   :删除任务

       cat  /etc/crontab    :查看crontab文件

       

        现在我们来添加一条任务:

         59 23 * * * /var/local/clearlog.sh status >>/var/local/clear.txt        :每天23:59执行脚本并输出到clear.txt文件 ,定时任务的写法:*(分)  *(时) *(日) *(月) *(周)  command

         添加好后查看(crontab -l ),会发现有一条任务(为方便测试,这里可自行替换周期,如:*/1 * * * *   :每分钟执行一次 ):

        

       

         这是可能出现clear.txt生成了。但是没有内容,日志也没清除,这个原因可能是你没给这个脚本赋权限

         chmod 755 clearlog.sh

        

          PS:再解决这个问题过程中,碰到了一个问题,那就是在编辑一个文件时,写完后习惯性的CTRL+S,然后窗口就不能编辑了,退也退不了,后来查了,发现:

                 Ctrl s    暂停该终端  (解决办法:Ctrl q)

                 Ctrl c   中止当前正在执行的程序。
                 Ctrl d   相当于exit命令

         OK。

  • 相关阅读:
    如何在 ASP.NET 中(服务器端)主动清除(HTTP内容响应时)浏览器中的 Cookies 数据
    修复 dji spark 的 micro sd/tf 存储卡里不能正常播放的视频文件
    在 Windows 7 中安装 .NET Framework 时遇到错误:无法建立到信任根颁发机构的证书链
    【转】在 Windows 10 下,配置 Kinect v2 可用于 Windows Hello 验证身份
    安装SQL Server提示“等待数据库引擎恢复句柄失败”
    [转]如何禁止 IIS 在 C:WindowsSystem32LogFilesHTTPERR 中生成日志文件
    Kinect v2 记录
    处理 ASP.NET 中的异常:无法在发送 HTTP 标头之后进行重定向。
    在 Windows Server 2008 中部署带 SignalR 的网站出错
    ( ̄▽ ̄)" 关于河北ETC记账卡的默认密码
  • 原文地址:https://www.cnblogs.com/Bread-Wang/p/9963780.html
Copyright © 2011-2022 走看看