关闭ssh后Laravel Horizo​​n停止

时间:2018-11-04 20:42:54

标签: laravel ssh cron laravel-horizon

我刚开始使用Laravel和Horizo​​n,所以很抱歉,如果我的问题还没有解决。

我已经使用Horizo​​n和Redis数据库设置了Laravel。只要在其中运行php artisan horizon命令的情况下打开SSH连接,一切都可以正常工作。一旦我关闭SSH会话,它就会停止工作。

我对这些事情不熟悉,所以我想知道会有什么解决方案。我发现有人说您应该php artisan horizon &,但是这似乎可以工作几分钟,然后什么也没有。

该系统是在网络服务器上设置的,因此也许cronjob可以修复它。但是我对这些事情的经验非常有限。我希望外面有人可以提供帮助。

3 个答案:

答案 0 :(得分:2)

https://laravel.com/docs/5.7/horizon#deploying-horizon

  

如果要将Horizo​​n部署到活动服务器,则应配置一个进程监视器以​​监视php artisan horizon命令,并在意外退出时重新启动它。将新代码部署到服务器时,您需要指示Horizo​​n主进程终止,以便可以由进程监视器重新启动它并接收代码更改。

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命令:

  1. ssh进入服务器。
  2. 运行screen
  3. 运行命令php artisan horizon
  4. 先按Ctrl + a,再按d,从当前会话中分离出来,然后从ssh退出

答案 2 :(得分:0)

当我们在终端会话中启动长时间运行的命令(例如Horizo​​n),然后退出该会话时,终端会向该进程发送“挂断”信号(SIGHUP),通常会导致该信号退出。

对于基本解决方案,我们可以使用 nohup 实用程序调用命令:

nohup php artisan horizon >> horizon.log 2>&1 &

此命令在后台启动Horizo​​n,并将输出发送到当前工作目录中的 horizo​​n.log 。然后,当我们关闭终端时,该过程将忽略挂断信号,因此Horizo​​n会继续无限期运行。但是,如果Horizo​​n稍后崩溃,则它不会自行重启。这就是为什么Laravel建议使用诸如Supervisor之类的流程管理器运行Horizo​​n的原因-我们可以configure supervisord to restart Horizon automatically在其意外退出时防止服务中断。

对以上命令的修改为我们提供了一些相同的功能:

nohup sh -c 'while true; do php artisan horizon; done' >> horizon.log 2>&1 &

此命令每次退出时都会重新启动Horizo​​n,对于极为有限的托管环境而言,可能就足够了。当然,如果没有其他配置,它就不会在启动时启动,但是如果不进一步了解托管环境,我将无法提供任何有用的建议。

最后,请记住,当我们将新代码部署到服务器时,我们需要重新启动Horizo​​n主进程,以便Horizo​​n重新加载所有更改。我们可以执行以下命令,如果使用上面的第二个命令运行Horizo​​n,它将重新启动:

php artisan horizon:terminate