我有一个简单的应用程序,用户可以添加帖子并安排它在特定时间上线。
现在我面前有两种方法:
第一种方法: 我可以设置一个每分钟都会被调用的脚本,它将检查当前是否有任何帖子待处理,并且如果它们是这样的话就会发布它们:
我的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 !!');
}
我想知道哪种方法更好,为什么?
答案 0 :(得分:2)
我会选择第一种方法,因为它更简单。您只有一个移动部件(单个cron作业),而不是每个预定的帖子添加一个新作业。您还可以在选项#2中运行风险,让2个进程同时尝试编写crontab并可能丢失其中一个作业。 #1简单明了,我不知道#2真的买了什么。
答案 1 :(得分:2)
答案 2 :(得分:1)
我想我会使用"静态cronjob"在数据库中处理和存储作业是因为" cron作为动态一次性调度程序的一些缺点":
crontab会变大...... croned作业应该在运行时从crontab中删除?
如果您的服务器在应该分派作业时遇到停机怎么办? crontab会检查过期的工作吗?
如果您需要将应用程序移动到另一台服务器,则需要迁移crontab ...看起来很奇怪,但也许 很奇怪。< / p>
运行包含用户输入的shell命令需要很多小心。