Linux 的 Crond(二)

最近因为工做中用到了crond,以前对crond不是很了解,只知道咋用,可是此次须要考虑好多状况,因此又深刻了解了一下crond,下面就如下几个问题来谈谈crond。php

  1. crond 中指定的job,若是这次没有执行完,下一个执行周期又到了,此时会怎么样呢?html

    答:这次job没有执行完的话,下一个执行周期又到了,job会重复执行。用ps命令能够查看,下面是我查看的结果。redis

    [root@localhost etc]# ps -ef | grep Test
    root      48460  73018  0 18:34 pts/0    00:00:00 grep --color=auto Test
    root      98880  98878  0 18:06 ?        00:00:00 php Test.php
    root     101631 101629  0 18:07 ?        00:00:00 php Test.php
    root     104427 104425  0 18:08 ?        00:00:00 php Test.php
  2. 如何避免crond中job重复执行呢?测试

    能够参考 crontab 解决周期内未执行完重复执行 这篇博客,文章讲了三种方法(利用了互斥锁),我当时的解决办法是在Reids中设置一个job是否能够执行的标记,伪代码以下:.net

    //Test.php 文件的主要内容
    $redis = new Redis();
    $keyExist = $redis->exists('job_can_start');
    if (!$keyExist) {
        $redis->set('job_can_start',1);
        $canExcute = 1;
    } else {
        $canExcute = $redis->get('job_can_start');
    }
    if ($canExcute){
        $redis->set('job_can_start', 0);
        //下面写具体的job
        …………
    
    
       $redis->set('job_can_start', 1);
    }
  3. 把crond 服务关了,会影响正在执行的job吗?code

    据我测试所知,关闭crond服务不会影响正在执行job的进程,当job执行完后,执行job的进程才会自动退出。htm

    测试过程以下:blog

    1. 编写一个job,而后使用任务调度 执行这个任务(注意要将任务的执行周期要设置的比任务的执行时间短不少,这样效果明显,具体crond怎么使用请参考http://www.javashuo.com/article/p-cxbsugpi-gp.html )。
    2. 此时使用ps命令查看一下执行的脚本进程个数,预计几个周期之后,再查看一下执行脚本的进程个数,这时个数比以前查看的应该明显增多
    3. 将crond服务关掉,马上查看进程个数,此时进程个数应该变化不大,过几个周期以后再查看进程个数,应该会有所减小。
  4. crond 运行原理进程

    其实上面的几个问题若是了解Linux定时任务的运行原理的话,应该会很容易。在这里推荐一篇博客Cron运行原理, 里面讲到了crond的工做流,感兴趣的小伙伴能够好好研究研究。crontab

如需转载,请注明出处:http://www.javashuo.com/article/p-gjmzqryw-kh.html

相关文章
相关标签/搜索