Php 在Lumen/Laravel中安排作业:我这样做正确吗?
根据以下教程(),我提出了以下脚本来安排Lumen应用程序中的作业:Php 在Lumen/Laravel中安排作业:我这样做正确吗?,php,laravel,cron,jobs,lumen,Php,Laravel,Cron,Jobs,Lumen,根据以下教程(),我提出了以下脚本来安排Lumen应用程序中的作业: namespace App\Console; use App\Jobs\ClearAccessLog; use Illuminate\Console\Scheduling\Schedule; use Laravel\Lumen\Console\Kernel as ConsoleKernel; use App\Jobs\Special\DeleteCache; use App\Jobs\Special\FetchRemote
namespace App\Console;
use App\Jobs\ClearAccessLog;
use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;
use App\Jobs\Special\DeleteCache;
use App\Jobs\Special\FetchRemoteArticles;
use App\Jobs\Special\FetchUpdateCategories;
use App\Jobs\Special\UpdateArticles;
use Illuminate\Support\Facades\Queue;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->call(function() {
Queue::bulk([
new FetchUpdateCategories,
new FetchRemoteArticles,
new UpdateArticles,
new DeleteCache
],null,'specialqueue');
})->daily();
// listen to
$schedule->job(new ClearAccessLog())->weekly();
// listen to the helpdocs queue
$schedule->command('php artisan queue:work --timeout=0 --memory=4096 --queue=specialqueue')->everyFiveMinutes();
// listen to default jobs
$schedule->command('php artisan queue:work --timeout=0 --memory=4096')->daily();
}
}
根据服务器上的文档,我只需注册一个cronjob,如下所示:
crontab -e
然后添加:
* * * * * php /path-to-my-project/artisan schedule:run >> /dev/null 2>&1
不管怎样,我注意到如果我执行
php artisan queue:work --timeout=0 --memory=4096 --queue=specialqueue
通过SSH,它会一直侦听,直到命令停止,因此我不确定调度器是否会在其他任务仍在运行时每隔五分钟启动一个新的后台任务
如何仅启动此命令一次?总的来说,您是否看到一些明显的错误(我不熟悉这个主题)?您不能按计划启动队列工作人员。队列工作者是一个守护进程,它侦听任何作业是否正常工作,如果没有,它将一直休眠,直到下一个作业可用。您试图做的是创建没有意义的无限队列工作者 你应该检查一下手册。如果允许您安装主管,请让主管控制您的队列工作人员。Supervisor帮助您监视队列工作程序,在任何情况下,如果出现错误,它将尝试重新启动
或者,您应该通过ssh在后台启动队列工作程序,并将进程与当前用户分离。但是,如果出现任何故障,队列工作程序将不会自动重新启动。谢谢,这正是我想知道的。您是否找到了正确安排作业的解决方案?我目前在Lumen 5.5上,听说不能注册$schedule->job()之类的作业。。。所以我做了一些类似于
$schedule->call(function(){$job=(new SendDeliveryEmailJob())->onQueue('default');dispatch($job);})->description('Task to send periodically mailing report')->everyMinute的事情
但即使在artisan schedule:run
和artisan queue:restart
之后,我看到调用的是我的作业类的构造函数,而不是句柄函数:(@Alex我的上一个Lumen项目是在一段时间以前;-)也许你应该用你的代码问一个新问题,一些有经验的Laravel开发人员会知道哪里出了问题。