[英]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真正能给您带来什么。
我认为我会使用“静态cronjob”方法并将作业存储在数据库上,因为“ cron作为动态的oneoff调度程序”存在一些缺点:
那个crontab会变大... croned作业应该在运行时从crontab中删除吗?
如果您的服务器在应派遣作业时出现停机,该怎么办? crontab是否检查过期的工作?
如果您需要将应用程序移动到另一台服务器,则需要迁移crontab ...看起来很奇怪,但也许并不是那么奇怪。
运行包含用户输入的shell命令需要非常小心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.