Supervisor和CronJobs的区别

6

我需要运行一个 Laravel 命令 php artisan queue:work --daemon 来处理存储在 Beanstalkd 队列中的作业。

我找到了两种解决方案:

  • 使用 Supervisord 运行命令:在 Supervisord 的配置文件中注册命令并启动它。
  • 使用 CronJobs 运行命令:*/1 * * * * /usr/bin/php /var/www/laravelProj/artisan queue:work --daemon --tries=3

可以有人解释哪种方法是最好的,可以提高性能。

2个回答

9

Supervisor的主要优势在于你设置的任务会持续不断地工作。这意味着当进程结束时,新进程将立即开始。

Crontab最少每分钟运行一次进程!所以如果你有一个类似queue:work的任务,使用SupervisorCrontab更好。


3
永远不要使用CronJobs来执行队列。在CronJobsSuperviser之间有一些区别。
  1. CronJobs中,您必须设置执行php artisan queue:work的时间。假设您将CronJob的时间设置为每5分钟运行一次,则即使您当前的进程在2分钟后完成,新进程也将在5分钟后开始执行,因为您将cronjob的时间设置为5分钟后运行,但是在Superviser中,当您当前的进程完成后,它将立即启动新进程。

  2. 第二个也是最重要的原因是,您不应该使用cronjob来执行队列,因为它可能会耗尽所有内存,并且您将看到很多不必要的事情发生在您的现场,因为假设您运行一个需要5分钟才能执行的进程,并且您将cronjob的时间设置为1分钟后运行,则每隔一分钟它将执行命令php aritisan queue:work。它不会等待上一个进程完成,而是会耗尽所有资源,但是在Superviser中,您可以限制同时运行的进程数量,如果进程达到其限制,则Superviser将等待前一个进程完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接