Linux 的 Crond(二)

最近由于工作中用到了crond,之前对crond不是很了解,只知道咋用,但是这次需要考虑好多情况,所以又深入了解了一下crond,下面就以下几个问题来谈谈crond。

  1. crond 中指定的job,如果此次没有执行完,下一个执行周期又到了,此时会怎么样呢? 答:此次job没有执行完的话,下一个执行周期又到了,job会重复执行。用ps命令可以查看,下面是我查看的结果。
[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
  1. 如何避免crond中job重复执行呢? 可以参考 crontab 解决周期内未执行完重复执行 这篇博客,文章讲了三种方法(利用了互斥锁),我当时的解决办法是在Reids中设置一个job是否可以执行的标记,伪代码如下:
//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);
}
  1. 把crond 服务关了,会影响正在执行的job吗? 据我测试所知,关闭crond服务不会影响正在执行job的进程,当job执行完后,执行job的进程才会自动退出。 测试过程如下:
  2. 编写一个job,然后使用任务调度 执行这个任务(注意要将任务的执行周期要设置的比任务的执行时间短很多,这样效果明显,具体crond怎么使用请参考https://www.cnblogs.com/zhuchenglin/p/8758444.html )。
  3. 此时使用ps命令查看一下执行的脚本进程个数,预计几个周期以后,再查看一下执行脚本的进程个数,这时个数比之前查看的应该明显增多
  4. 将crond服务关掉,立刻查看进程个数,此时进程个数应该变化不大,过几个周期之后再查看进程个数,应该会有所减少。
  5. crond 运行原理 其实上面的几个问题如果了解Linux定时任务的运行原理的话,应该会很容易。在这里推荐一篇博客Cron运行原理, 里面讲到了crond的工作流,感兴趣的小伙伴可以好好研究研究。

如需转载,请注明出处:https://www.cnblogs.com/zhuchenglin/p/11514777.html

Original: https://www.cnblogs.com/zhuchenglin/p/11514777.html
Author: lin_zone
Title: Linux 的 Crond(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10332/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总