Laravel 我如何在后台运行命令,它只在前台运行?
我有一个命令,它的工作原理类似于Laravel 我如何在后台运行命令,它只在前台运行?,laravel,cron,schedule,laravel-scheduler,Laravel,Cron,Schedule,Laravel Scheduler,我有一个命令,它的工作原理类似于php artisan queue:listen。它不能在后台工作,但我必须将其添加到cron选项卡,但在那里它不工作。是否可以执行类似于php artisan schedule:run的操作?最重要的是,当我中断此命令时,所有功能都将停止。在这种情况下我该怎么办?拉雷维尔有自己的克朗。首先,您应该将laravelcron添加到Linux系统cron中 * * * * * cd /path-to-your-project && php artisa
php artisan queue:listen
。它不能在后台工作,但我必须将其添加到cron选项卡,但在那里它不工作。是否可以执行类似于php artisan schedule:run的操作?最重要的是,当我中断此命令时,所有功能都将停止。在这种情况下我该怎么办?拉雷维尔有自己的克朗。首先,您应该将laravelcron添加到Linux系统cron中
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
然后可以将命令添加到Laravel cron
Laravel crons位于文件/app/Console/Kernel.php中
are应该在函数内部
受保护功能计划(计划$schedule)
比如说
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send Taylor --force')->cron('* * * * *');
}
但如果您希望命令作为系统进程而不是cron运行,则应使用supervisors程序(supervisord)或者,您可以为PHP命令文件创建一个systemd服务文件,然后像运行正常的systemd服务一样运行,甚至还可以通过web界面中的monit程序来管理此服务如果您的PHP脚本是一个进程,则表示类的构造函数方法在启动脚本时仅运行一个,如果您在构造函数认为脚本中的数据将过时 您的流程脚本应该是这样的流程
class OpenOrders extends Command
{
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->initTicker();
$this->updateBalances();
//the Process
while (true) {
//this is the right place to read DB data
$this->getAllOptions();
$this->openOrders = $this->getOpenOrders();
}
return 0;
}
}
谢谢,我想我会尝试使用Supervisor,因为它在cron中不起作用。是的,使用Supervisor是一个好主意,在Laravel文档中有一些关于它的信息,我尝试通过Supervisor来做,效果很好。非常感谢。但如果我在DB中更改了某些内容,它不会重新启动。实际上,我将自动重新启动设置为config。我能做什么?因为当我更改设置值时,当我不使用supervisorctl restart时,它也不会更改