如何解决如何在仅在前台运行的后台命令中运行?
我有命令,它的作用类似于 PHP artisan queue:listen
。它不能在后台共同工作,但我必须将它添加到 cron 选项卡,但它在那里不起作用。是否可以执行类似 PHP artisan schedule:run
的操作?最重要的是,当我中断此命令时,所有功能都会停止。在这种情况下我该怎么办?
解决方法
Laravel 有自己的 cron。首先,你应该将 Laravel cron 添加到 Linux 系统 cron
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
然后你可以将你的命令添加到 Laravel cron。
Laravel crons 存在于 /app/Console/Kernel.php 文件中 应该在函数内部 受保护的函数调度(调度 $schedule) 例如
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send Taylor --force')->cron('* * * * *');
}
但是如果您希望您的命令作为系统进程而不是 cron 运行,您应该使用主管程序(supervisord),或者您可以为 PHP 命令文件创建一个 systemd 服务文件,然后像正常的 systemd 服务一样运行甚至还可以通过带有 Web 界面的 monit 程序来管理此服务
,如果您的 php 脚本是一个进程,则意味着类的构造函数方法仅在您启动脚本时运行,如果您在构造函数中红色 db 数据,则脚本中的数据将过时 您的流程脚本应该是这样的流程
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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。