Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

repat's avatar
Level 7

Redis: "Connection refused" error log on reboot

Hi,

I'm using Laravel Horizon / Redis with php artisan horizon running via supervisor (through Forge). On rebooting the server (via sudo reboot) I'm getting a ton of Log::error() entries that just say Connection Refused, also forwarded to Slack.

I get that it makes sense to Log these errors, but not during reboot. How are you rebooting your servers, stop the workers before? Or just ignore the errors?

Furthermore, this only happens when I'm running Redis locally and not e.g. as DBaaS. So it could probably be prevented by shutting down the workers first, then Redis?

  • Ubuntu 18.04 (also 20.04)
  • Laravel ^8
  • Horizon ^5.6

Related: https://github.com/laravel/ideas/issues/2471

[2021-01-26 23:31:07] production.ERROR: Connection refused {"exception":"[object] (RedisException(code: 0): Connection refused at /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:141)
[stacktrace]
#0 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(141): Redis->connect()
#1 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(84): Illuminate\Redis\Connectors\PhpRedisConnector->establishConnection()
#2 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Support/helpers.php(263): Illuminate\Redis\Connectors\PhpRedisConnector->Illuminate\Redis\Connectors\{closure}()
#3 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(109): tap()
#4 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(28): Illuminate\Redis\Connectors\PhpRedisConnector->createClient()
#5 [internal function]: Illuminate\Redis\Connectors\PhpRedisConnector->Illuminate\Redis\Connectors\{closure}()
#6 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php(541): call_user_func()
#7 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php(220): Illuminate\Redis\Connections\PhpRedisConnection->command()
#8 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php(580): Illuminate\Redis\Connections\Connection->__call()
#9 /home/forge/domain.com/releases/20210125112949/vendor/laravel/horizon/src/RedisHorizonCommandQueue.php(52): Illuminate\Redis\Connections\PhpRedisConnection->__call()
#10 /home/forge/domain.com/releases/20210125112949/vendor/laravel/horizon/src/Supervisor.php(329): Laravel\Horizon\RedisHorizonCommandQueue->pending()
#11 /home/forge/domain.com/releases/20210125112949/vendor/laravel/horizon/src/Supervisor.php(288): Laravel\Horizon\Supervisor->processPendingCommands()
#12 /home/forge/domain.com/releases/20210125112949/vendor/laravel/horizon/src/Supervisor.php(259): Laravel\Horizon\Supervisor->loop()
#13 /home/forge/domain.com/releases/20210125112949/vendor/laravel/horizon/src/Console/SupervisorCommand.php(99): Laravel\Horizon\Supervisor->monitor()
#14 /home/forge/domain.com/releases/20210125112949/vendor/laravel/horizon/src/Console/SupervisorCommand.php(74): Laravel\Horizon\Console\SupervisorCommand->start()
#15 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Laravel\Horizon\Console\SupervisorCommand->handle()
#16 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#17 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#18 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#19 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Container/Container.php(610): Illuminate\Container\BoundMethod::call()
#20 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\Container\Container->call()
#21 /home/forge/domain.com/releases/20210125112949/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute()
#22 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run()
#23 /home/forge/domain.com/releases/20210125112949/vendor/symfony/console/Application.php(971): Illuminate\Console\Command->run()
#24 /home/forge/domain.com/releases/20210125112949/vendor/symfony/console/Application.php(290): Symfony\Component\Console\Application->doRunCommand()
#25 /home/forge/domain.com/releases/20210125112949/vendor/symfony/console/Application.php(166): Symfony\Component\Console\Application->doRun()
#26 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\Component\Console\Application->run()
#27 /home/forge/domain.com/releases/20210125112949/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run()
#28 /home/forge/domain.com/releases/20210125112949/artisan(37): Illuminate\Foundation\Console\Kernel->handle()
#29 {main}
0 likes
2 replies
senaranya's avatar

The reason it happens is: When a reboot happens, Redis gets stopped first while Laravel Horizon/Queues are still running. Since Horizon needs Redis, it complains about missing connection.

To prevent this, we need to tell systemd to stop Supervisor (and thus Horizon) after Redis - in /etc/systemd/system/multi-user.target.wants/supervisor.service, add keydb.service in [Unit] section:

After=network.target keydb.service

Followed by systemctl restart supervisor

priyanka92's avatar

I have made the same changes in /etc/systemd/system/multi-user.target.wants/supervisor this file. Still' getting the same error- production.ERROR: Connection refused {"exception":"[object] (RedisException(code: 0): Connection refused at /var/www/html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:153) Can you please help here? Thank you!!

Please or to participate in this conversation.