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

相關文章
相關標籤/搜索