我刚开始使用Laravel和Horizon,所以很抱歉,如果我的问题还没有解决。
我已经使用Horizon和Redis数据库设置了Laravel。只要在其中运行php artisan horizon
命令的情况下打开SSH连接,一切都可以正常工作。一旦我关闭SSH会话,它就会停止工作。
我对这些事情不熟悉,所以我想知道会有什么解决方案。我发现有人说您应该php artisan horizon &
,但是这似乎可以工作几分钟,然后什么也没有。
该系统是在网络服务器上设置的,因此也许cronjob可以修复它。但是我对这些事情的经验非常有限。我希望外面有人可以提供帮助。
答案 0 :(得分:2)
https://laravel.com/docs/5.7/horizon#deploying-horizon
如果要将Horizon部署到活动服务器,则应配置一个进程监视器以监视
php artisan horizon
命令,并在意外退出时重新启动它。将新代码部署到服务器时,您需要指示Horizon主进程终止,以便可以由进程监视器重新启动它并接收代码更改。
Laravel为此建议主管:
[program:horizon]
process_name=%(program_name)s
command=php /home/forge/app.com/artisan horizon
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/app.com/horizon.log
答案 1 :(得分:0)
如果服务器操作系统是linux,一种快速的解决方案是使用screen
命令:
screen
。php artisan horizon
。Ctrl
+ a
,再按d
,从当前会话中分离出来,然后从ssh退出答案 2 :(得分:0)
当我们在终端会话中启动长时间运行的命令(例如Horizon),然后退出该会话时,终端会向该进程发送“挂断”信号(SIGHUP),通常会导致该信号退出。
对于基本解决方案,我们可以使用 nohup 实用程序调用命令:
nohup php artisan horizon >> horizon.log 2>&1 &
此命令在后台启动Horizon,并将输出发送到当前工作目录中的 horizon.log 。然后,当我们关闭终端时,该过程将忽略挂断信号,因此Horizon会继续无限期运行。但是,如果Horizon稍后崩溃,则它不会自行重启。这就是为什么Laravel建议使用诸如Supervisor之类的流程管理器运行Horizon的原因-我们可以configure supervisord to restart Horizon automatically在其意外退出时防止服务中断。
对以上命令的修改为我们提供了一些相同的功能:
nohup sh -c 'while true; do php artisan horizon; done' >> horizon.log 2>&1 &
此命令每次退出时都会重新启动Horizon,对于极为有限的托管环境而言,可能就足够了。当然,如果没有其他配置,它就不会在启动时启动,但是如果不进一步了解托管环境,我将无法提供任何有用的建议。
最后,请记住,当我们将新代码部署到服务器时,我们需要重新启动Horizon主进程,以便Horizon重新加载所有更改。我们可以执行以下命令,如果使用上面的第二个命令运行Horizon,它将重新启动:
php artisan horizon:terminate