zoukankan      html  css  js  c++  java
  • linux定时清理数据库过期记录

    cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:

    /sbin/service crond start//没打开的话首先要打开。
    /sbin/service crond stop
    /sbin/service crond restart
    /sbin/service crond reload

    以上1-4行分别为启动、停止、重启服务和重新加载配置。

    要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可

    查看当前用户的crontab,输入 crontab -l

    编辑crontab,输入 crontab -e

    删除crontab,输入 crontab -r

    添加任务

    crontab -e  //执行之后会打开一个文件。在文件中追加如下内容即可。
    0 */1 * * * command
    0 */2 * * * command

    查询任务是否加了:

    crontab -l -u root #查看root用户
    0 */1 * * * command
    0 */2 * * * command

    基本格式 :

    *  *  *  *  *  command

    分 时 日 月 周 命令

    第1列表示分钟1~59 每分钟用*或者 */1表示

    第2列表示小时1~23(0表示0点)

    第3列表示日期1~31

    第4列表示月份1~12

    第5列标识号星期0~6(0表示星期天)

    第6列要运行的命令

    crontab文件的一些例子(博主会在此处不定时增加例子):

    1. 每10分钟执行一个shell脚本。
      */10 * * * * /home/tmp/clear.sh

        */10表示每10分钟执行。

      但是,有一个问题,就是,如果你想通过定时任务来调用执行***.php,那么,就可以这么写。

      */10 * * * * /usr/local/php/bin/php /home/shells/clearOutOfDate.php

      上面这句话是可以定时运行的。我测试过。如果不行,请使用chmod 744 ***.php修改你的文件可执行权限(rwx的x一定要有,如果是root用户的话)。不行的话,可以提升权限至777再试试

      我想说的问题是:如果你把

      /usr/local/php/bin/php /home/shells/clearOutOfDate.php

      这句话放在shell脚本里面,比如这样,

      我自己也调了很久,但是这句话就是不会被执行。echo "你好啊"这句话是可以输出。找不到问题在哪里。所以建议大家在crontab定时执行php文件的时候,直接在

      crontab -e 里面写

      */1 * * * * /usr/local/php/bin/php /home/shells/clearOutOfDate.php

       就好了。另外注意 php  /home/shells/clearOutOfDate.php是不能执行的。对于php的可执行文件要写全绝对路径。一般都会在/usr/local/php/bin/php目录下,可以找一找。

    2. (2018-1-11日更)定时每个月处理一下日志文件。可以先看我的bash 命令:

      #!/bin/bash
      
      cp success.log success/$(date +%Y-%m-%d).log
      cp error.log error/$(date +%Y-%m-%d).log
      cp login.log login/$(date +%Y-%m-%d).log
      
      echo "---------------------------" > success.log
      echo "---------------------------" > error.log
      echo "---------------------------" > login.log

      应用会产生日志对吧?但是我们一年下来总把日志追加在一个文件的话,文件越来越大。每次定时读写也是非常耗费内存的。所以,我们需要针对日志文件的积累情况,定一个合理的时间,把日志的内容取出来,按照日期归类。例如图中:

      $(date +%Y-%m-%d)

      就是按照年月日来把log文件归类。下面设置定时执行,因为我的日志产生的不是很多。每个月最多也就1M多一点。所以,我设置一下,每10天,归档一次log文件。这样可以减小后期追加log的IO消耗。命令如下:

      * 3 1,15 * * /data/wwwroot/project1/wx/logs/copy.sh

      表示每个月的1号和15号的凌晨3点会执行一次。

    3. (2018-1-11日更)crontab无法做到秒级执行,最小的粒度是分钟。不过可以变相实现秒级定时任务。
      * * * * *  "命令"

      上面的全星号,可以实现每分钟运行。

      * * * * *   "命令"
      * * * * *  sleep 20; "命令"
      * * * * *  sleep 40; "命令"
      

        上面的三行 可以做到每20秒执行。也可以写一个循环脚本,在脚本内进行sleep骚操作。

    4.   

    定时任务不会执行的问题总结:

    1 crond服务未启动

    crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它:

    crond

    service crond start

    如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:

    yum -y install crontabs

    2 权限问题

    比如:脚本没有x执行权限,解决方法:

    增加执行权限,或者用bash abc.sh的方法执行

    3 路径问题

    有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径,比如:以root身份登录shell后执行一个/root/test.sh,只要执行

    ./test.sh

    就可以了。但是在crontab中,就会找不到这个脚本,比如写完整:

    /root/test.sh

    4 时差问题

    因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准。

    5 变量问题

    有时候命令中含有变量,但crontab执行时却没有,也会造成执行失败。

  • 相关阅读:
    面试题:垂直居中几种方法
    零碎记忆--随机
    v-model 和 :model 的区别
    Vue--keep-alive 理解
    vue 中 $route 和 $router 的区别
    Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单
    Vue + Element UI 实现权限管理系统 前端篇(九):接口格式定义
    Vue + Element UI 实现权限管理系统 前端篇(八):管理应用状态
    Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装
    [2020牛客暑期多校训练营(第十场)C Decrement on the Tree]
  • 原文地址:https://www.cnblogs.com/simuhunluo/p/8206165.html
Copyright © 2011-2022 走看看