标签:inux 应该 log 文件的 host root key job 工作流
最近由于工作中用到了crond,之前对crond不是很了解,只知道咋用,但是这次需要考虑好多情况,所以又深入了解问题了一下crond,下面就以下几个来谈谈crond。
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
如何避免crond中job重复执行呢?
可以参考 crontab 解决周期内未执行完重复执行 这篇博客,文章讲了三种方法(利用了互斥锁),我当时的解决办法是在Reids中设置一个job是否可以执行的标记$bool,伪代码如下:
//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吗?
据我测试所知,关闭crond服务不会影响正在执行job的进程,当job执行完后,执行job的进程才会自动退出。
测试过程如下:
crond 运行原理
其实上面的几个问题如果了解Linux定时任务的运行原理的话,应该会很容易。在这里推荐一篇博客Cron运行原理, 里面讲到了crond的工作流,感兴趣的小伙伴可以好好研究研究。
如需转载,请注明出处:https://www.cnblogs.com/zhuchenglin/p/11514777.html
标签:inux 应该 log 文件的 host root key job 工作流
原文地址:https://www.cnblogs.com/zhuchenglin/p/11514777.html