Skip to content

Easily update your @Supervisor configuration by using annotations in Symfony commands.

License

Notifications You must be signed in to change notification settings

mybuilder/supervisor-bundle

Repository files navigation

Supervisor Bundle

Build Status

A bundle for Symfony 4/5 which allows you to use @Supervisor annotations to configure how Supervisor runs your console commands.

Installation

Install with composer

Run the composer require command:

$ php composer.phar require mybuilder/supervisor-bundle

Enable the bundle

Enable the bundle in the config/bundles.php for Symfony:

return [
    MyBuilder\Bundle\SupervisorBundle\MyBuilderSupervisorBundle::class => ['all' => true],
];

Configure the bundle

You can add the following to packages/my_builder_supervisor.yaml for Symfony to define your global export configuration:

my_builder_supervisor:
    exporter:
        # any Supervisor program options can be specified within this block
        program:
            autostart: 'true'
        
        # allows you to specify a program that all commands should be passed to
        executor: php 
        
        # allows you to specify the console that all commands should be passed to
        console: bin/console

Usage

The first step is to add the use case for the annotation to the top of the command you want to use the @Supervisor annotations in.

use MyBuilder\Bundle\SupervisorBundle\Annotation\Supervisor;

Then define the @Supervisor annotation within the command's PHPDoc, which tells Supervisor how to configure this program. The example below declares that three instances of this command should be running at all times on the server entitled 'web', with the provided parameter --send.

/**
 * Command for sending our email messages from the database.
 *
 * @Supervisor(processes=3, params="--send", server="web")
 */
class SendQueuedEmailsCommand extends Command {}

Exporting the Supervisor configuration

You should run bin/console supervisor:dump and review what the Supervisor configuration will look like based on the current specified definition. If you are happy with this you can write out the configuration to a conf file:

$ bin/console supervisor:dump --user=mybuilder --server=web > "/etc/supervisor.d/symfony.conf"

And then reload Supervisor:

$ kill -SIGHUP $(supervisorctl pid)

Environment

You can choose which environment you want to run the commands in Supervisor under like this:

$ bin/console supervisor:dump --server=web --env=prod

Created by MyBuilder - Check out our blog for more insight into this and other open-source projects we release.