0

我刚刚开始使用 Laravel 和 Horizo​​n,所以如果我的问题有点过分,我很抱歉。

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

我对这些东西很陌生,所以我想知道会有什么解决方案。我发现有人说你应该这样做php artisan horizon &,但这似乎工作了几分钟,然后什么也没有。

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

4

3 回答 3

2

https://laravel.com/docs/5.7/horizo​​n#deploying-horizo​​n

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

Laravel 为此推荐了 Supervisor:

[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
于 2018-11-04T22:03:42.240 回答
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 的原因——我们可以将supervisord配置为在 Horizo​​n 意外退出时自动重启以防止服务中断。

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

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
于 2018-12-07T02:48:34.820 回答
0

如果服务器操作系统是 linux ,一个快速的解决方案是使用该screen命令:

  1. ssh 进入服务器。
  2. 运行screen
  3. 运行命令php artisan horizon
  4. 点击Ctrl+ a,然后d,从当前会话中分离,然后从 ssh 退出
于 2018-11-04T20:52:13.400 回答