繁体   English   中英

每分钟运行Cron或动态编写Cron Job更好吗?

[英]Is it better to run Cron every minute or write Cron Job dynamically?

我有一个简单的应用程序,用户可以在其中添加帖子并安排它在特定时间上线。

现在我面前有两种方法:

第一种方法:我可以设置一个脚本,该脚本将每分钟调用一次,它将检查当前是否有任何待处理的帖子,并以如下方式发布它们:

我的Cron工作:

1 * * * * php myScriptToMakePostLive.php

要么

第二种方法我可以在用户提交帖子以供以后发布时在服务器上动态设置cron作业。 我正在使用此脚本:

 public function schedulePost(){
        $post = new Post();
        $post->body = $_POST['body'];
        $post->save();

        $scheduledTime = Carbon::parse($_POST['publish_on']);

        //saving cron dynamically 
        $output = shell_exec('crontab -l');
        file_put_contents('/tmp/crontab.txt', $output.PHP_EOL."{$scheduledTime->minute} {$scheduledTime->hour} {$scheduledTime->day} {$scheduledTime->month} * php myScriptToMakePostLive {$post->id}".PHP_EOL);
        echo exec('crontab /tmp/crontab.txt');
        die('Your post has been Scheduled !!');

    } 

我想知道哪种方法更好,为什么呢?

我会选择第一种方法,因为它要简单得多。 您只有一个活动部分(单个cron作业),而不是在每个计划的帖子中添加新的作业。 您还会在选项#2中冒风险,即有2个进程试图同时写入crontab,并有可能丢失其中一项作业。 #1简单明了,我不明白#2真正能给您带来什么。

嗯,说实话,也没有。

我会使用celery之类的日程安排服务。 如果我绝对必须推出自己的调度服务,它将与at而不是cron

它还取决于您认为用户安排帖子的频率。 我怀疑这是否经常发生。

我认为我会使用“静态cronjob”方法并将作业存储在数据库上,因为“ cron作为动态的oneoff调度程序”存在一些缺点:

  • 那个crontab会变大... croned作业应该在运行时从crontab中删除吗?

  • 如果您的服务器在应派遣作业时出现停机,该怎么办? crontab是否检查过期的工作?

  • 如果您需要将应用程序移动到另一台服务器,则需要迁移crontab ...看起来很奇怪,但也许并不是那么奇怪。

  • 运行包含用户输入的shell命令需要非常小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM