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执行时却没有,也会造成执行失败。

posted @ 2018-01-05 18:12  须小弥  阅读(1610)  评论(0编辑  收藏  举报