最近因爲工做中用到了crond,以前對crond不是很瞭解,只知道咋用,可是此次須要考慮好多狀況,因此又深刻了解了一下crond,下面就如下幾個問題來談談crond。php
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
如何避免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); }
把crond 服務關了,會影響正在執行的job嗎?code
據我測試所知,關閉crond服務不會影響正在執行job的進程,當job執行完後,執行job的進程纔會自動退出。htm
測試過程以下:blog
crond 運行原理進程
其實上面的幾個問題若是瞭解Linux定時任務的運行原理的話,應該會很容易。在這裏推薦一篇博客Cron運行原理, 裏面講到了crond的工做流,感興趣的小夥伴能夠好好研究研究。crontab
如需轉載,請註明出處:http://www.javashuo.com/article/p-gjmzqryw-kh.html