If you need to run specific program(s) and be sure they will get restarted if they quit unexpectedly or after a reboot, then you can create a file named Procfile
in your repository to be used by supervisord
. This works best with
capistrano-opscomplete
Show archive.org snapshot
.
If you want to use this feature, please contact ops@makandra.de
so we can enable it for your deployment.
Currenlty the Procfile features we support are rather limited, please be aware of this. The basic syntax of the Procfile
is:
$program_name: $command
For example to automatically start sidekiq
:
sidekiq: bundle exec sidekiq
Important: The defined commands should not daemonize, as supervisord
does that for you and otherwise can't track the commands.
You can use environment variables in your command with %{ENV_VARIABLE}s
where VARIABLE
is the name of the environment variable like this:
app: %{ENV_APPDIR}s/current/run_app start
After you've created the Procfile
, you also need to setup the the tasks for the deployment. If you're already using
capistrano-opscomplete
Show archive.org snapshot
, you can add these lines to your Capistrano config:
# Update and Restart supervisor config
after 'deploy:updating', 'opscomplete:supervisor:gen_config'
after 'deploy:published', 'opscomplete:supervisor:restart_procs'
There are more tasks and configuration options. Please refer to the README Show archive.org snapshot for those and more.
If you can't or don't want to integrate capistrano-opscomplete
, you can use the shell commands available on the server. They're useful if you want to verify commands manually too.
supervisor_gen_config
This command generates the configuration for supervisord
. You need to run it before the other commands and at least every time you change your Procfile
. There is no harm running it at every deploy.
supervisor_restart_procs
This command rereads the supervisord
configuration and (re)starts all configured programs.
supervisor_stop_procs
This command stops all your programs in case you want to them to be stopped while your deployment runs.
supervisor_status
This command shows the status of all configured supervisord
programs this user has access to.
supervisor_signal_procs $signal $program_name(optional)
This command sends the signal $signal (e.g. USR1
or TSTP
) to all programs or if specified to $program_name
.
The output of your programs (stdout and stderr) will get written into log files. You will find these logs here:
# stdout:
${appdir}/shared/log/${program_name}-1.log
# stderr:
${appdir}/shared/log/${program_name}-1.error.log