This gist may help you to install supervisor Manually on AWS Beanstalk host. I was enable to install and configure referring supervisor docs. Here are the steps by which I was able to use supervisor on my project.
Note: I have performed this steps on Laravel project and my instance was Debian powered. You can change according to your requirement.
- Check python with easy_install is installed
- Install supervisor >
$ easy_install supervisor
- Create directory for supervisor workers >
mkdir /etc/supervisor/conf.d/
- Create laravel worker file >
touch /etc/supervisor/conf.d/laravel-worker.conf
- Add following contents to
laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --tries=3
autostart=true
autorestart=true
user=root
numprocs=5
redirect_stderr=true
stdout_logfile=/var/www/html/storage/worker.log
- Change
command
andstdout_logfile
according to project setup - Create supervisor config file >
touch /etc/supervisord.conf
and following contents to created file
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
; Change according to your configurations
- Create log file for supervisor as >
touch /var/log/supervisor/supervisord.log
if not exist - Restart the supervisord as >
/usr/local/bin/supervisord -c /etc/supervisord.conf
- Reread supervisorctl as >
/usr/local/bin/supervisorctl reread
- Update supervisorctl as >
/usr/local/bin/supervisorctl update
- Start laravel-worker and any other workers as >
/usr/local/bin/supervisorctl start laravel-worker:*
- Check status whether workers are running as >
/usr/local/bin/supervisorctl status
you show see similar output as below
laravel-worker:laravel-worker_00 RUNNING pid 10039, uptime 0:20:35
laravel-worker:laravel-worker_01 RUNNING pid 10040, uptime 0:20:35
laravel-worker:laravel-worker_02 RUNNING pid 10041, uptime 0:20:35
laravel-worker:laravel-worker_03 RUNNING pid 10042, uptime 0:20:35
laravel-worker:laravel-worker_04 RUNNING pid 10043, uptime 0:20:35
- Done 🎉
Everything is working fine except the logging. I use cloudwatch for logging and it is logging up to the command execution. After that, there is no logs for the jobs there.