spiral / roadrunner-services
RoadRunner services manager
Fund package maintenance!
roadrunner-server
Requires
- php: >=8.1
- google/protobuf: ^3.7
- roadrunner-php/roadrunner-api-dto: ^1.4
- spiral/goridge: ^4.0
- spiral/roadrunner: ^2023.2 || ^2024.1
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^10.0
- vimeo/psalm: >=5.8
README
Roadrunner services manager
This package will help you to manage Roadrunner services
Requirements
Make sure that your server is configured with following PHP version and extensions:
- PHP 8.1+
Installation
You can install the package via composer:
composer require spiral/roadrunner-services
Usage
Such a configuration would be quite feasible to run:
rpc: listen: tcp://127.0.0.1:6001 service: {}
Then you need to create an instance of Spiral\RoadRunner\Services\Manager
use Spiral\RoadRunner\Services\Manager; use Spiral\Goridge\RPC\RPC; $rpc = RPC::create('tcp://127.0.0.1:6001')); $manager = new Manager($rpc);
Create a new service
use Spiral\RoadRunner\Services\Exception\ServiceException; try { $result = $manager->create( name: 'listen-jobs', command: 'php app.php queue:listen', processNum: 3, execTimeout: 0, remainAfterExit: false, env: ['APP_ENV' => 'production'], restartSec: 30 ); if (!$result) { throw new ServiceException('Service creation failed.'); } } catch (ServiceException $e) { // handle exception }
Check service status
use Spiral\RoadRunner\Services\Exception\ServiceException; try { $status = $manager->statuses(name: 'listen-jobs'); // Will return an array with statuses of every run process // [ // [ // 'cpu_percent' => 59.5, // 'pid' => 33, // 'memory_usage' => 200, // 'command' => 'foo/bar', // 'error' => null // ], // [ // 'cpu_percent' => 60.2, // 'pid' => 34, // 'memory_usage' => 189, // 'command' => 'foo/bar' // 'error' => [ // 'code' => 1, // 'message' => 'Process exited with code 1' // 'details' => [...] // array with details // ] // ], // ] } catch (ServiceException $e) { // handle exception }
Restart service
use Spiral\RoadRunner\Services\Exception\ServiceException; try { $result = $manager->restart(name: 'listen-jobs'); if (!$result) { throw new ServiceException('Service restart failed.'); } } catch (ServiceException $e) { // handle exception }
Terminate service
use Spiral\RoadRunner\Services\Exception\ServiceException; try { $result = $manager->terminate(name: 'listen-jobs'); if (!$result) { throw new ServiceException('Service termination failed.'); } } catch (ServiceException $e) { // handle exception }
List of all services
use Spiral\RoadRunner\Services\Exception\ServiceException; try { $services = $manager->list(); // Will return an array with services names // ['listen-jobs', 'websocket-connection'] } catch (ServiceException $e) { // handle exception }