This package will help you to manage Roadrunner services
Make sure that your server is configured with following PHP version and extensions:
- PHP 8.1+
You can install the package via composer:
composer require spiral/roadrunner-services
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);
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
}
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
}
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
}
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
}
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
}