Belal Mostafa Amin
Belal Mostafa Amin

Reputation: 80

Supervisor can't run a docker-compose up command

I'm trying to monitor multiple docker process using supervisor but I have tried everything I can but no results. for some reason, supervisor always say that it can't find a command docker-compose . I have pointed to the bin of the docker-compose on my machine, but still, it didn't work, I would appreciate if someone can help. this is my supervisord.conf file

; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Note: shell expansion ("~" or "$HOME") is not supported.  Environment
; variables can be expanded using this syntax: "%(ENV_HOME)s".

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0700                 ; socket file mode (default 0700)


[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
username=socialhub              ; (default is no username (open server))
password=socialhub              ; (default is no password (open server))

[inet_http_server]          ; inet (TCP) server disabled by default
port=127.0.0.1:9001         ; (ip_address:port specifier, *:port for all iface)
username=socialhub              ; (default is no username (open server))
password=socialhub              ; (default is no password (open server))

[supervisord]
logfile=supervisord/supervisord.log     ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=0              ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10                  ; (num of main logfile rotation backups;default 10)
loglevel=info                       ; (log level;default info; others: debug,warn,trace)
pidfile=supervisord/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false                      ; (start in foreground if true;default false)
minfds=1024                         ; (min. avail startup file descriptors;default 1024)
minprocs=200                        ; (min. avail process descriptors;default 200)
nocleanup=false                     ; (don't clean up tempfiles at start;default false)

; 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


; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.

[program:mongo]
command=/usr/local/bin/docker-compose up mongodb    ; the program (relative uses PATH, can take args)
process_name=%(program_name)s               ; process_name expr (default %(program_name)s)
numprocs=1                                  ; number of processes copies to start (def 1)
directory=supervisord                           ; directory to cwd to before exec (def no cwd)
priority=1000                               ; the relative start priority (default 999)
autostart=true                              ; start at supervisord start (default: true)
autorestart=unexpected                      ; whether/when to restart (default: unexpected)
startsecs=60                                ; number of secs prog must stay running (def. 1)
startretries=5                              ; max # of serial start failures (default 3)
;exitcodes=0,2                              ; 'expected' exit codes for process (default 0,2)
stopsignal=QUIT                             ; signal used to kill process (default TERM)
stopwaitsecs=1                              ; max num secs to wait b4 SIGKILL (default 10)
stopasgroup=false                           ; send stop signal to the UNIX process group (default false)
killasgroup=false                           ; SIGKILL the UNIX process group (def false)
stdout_logfile=supervisord/                 ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=0                   ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile=supervisord/                 ; stderr log path, NONE for none; default AUTO
stderr_logfile_maxbytes=10MB                ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=5                    ; # of stderr logfile backups (default 10)
stderr_events_enabled=true                  ; emit events on stderr writes (default false)


; The below sample eventlistener section shows all possible
; eventlistener subsection values, create one or more 'real'
; eventlistener: sections to be able to handle event notifications
; sent by supervisor.

[eventlistener:process_fail]
command=/usr/local/bin/docker-compose rm -f     ; the program (relative uses PATH, can take args)
process_name=%(program_name)s       ; process_name expr (default %(program_name)s)
numprocs=1                          ; number of processes copies to start (def 1)
events=PROCESS_LOG_STDERR               ; event notif. types to subscribe to (req'd)
buffer_size=10                      ; event buffer queue size (default 10)
directory=supervisord/                  ; directory to cwd to before exec (def no cwd)
priority=-1                         ; the relative start priority (default -1)
autostart=true                      ; start at supervisord start (default: true)
autorestart=unexpected              ; whether/when to restart (default: unexpected)
startsecs=1                         ; number of secs prog must stay running (def. 1)
startretries=3                      ; max # of serial start failures (default 3)
exitcodes=0,2                       ; 'expected' exit codes for process (default 0,2)
stopsignal=QUIT                     ; signal used to kill process (default TERM)
stopwaitsecs=1                      ; max num secs to wait b4 SIGKILL (default 10)
stopasgroup=false                   ; send stop signal to the UNIX process group (default false)
killasgroup=false                   ; SIGKILL the UNIX process group (def false)
;user=chrism                        ; setuid to this UNIX account to run the program
redirect_stderr=false               ; redirect proc stderr to stdout (default false)
stdout_logfile=NONE             ; stdout log path, NONE for none; default AUTO

Upvotes: 2

Views: 4482

Answers (1)

Tarun Lalwani
Tarun Lalwani

Reputation: 146510

The directory that you have used is not correct

directory=supervisord   

You should use the complete path of the directory where your docker-compose.yml file is present.

Edit - 1:

So I had to dig a bit deeper for you question. Spaces in command are not passed properly till version 3.0b2.

If you upgrade to 3.0.1 or higher the command with spaces would work fine. In your version it is taking full value of command and trying to locate that as a file, that us why you see a command not found error

You can easily upgrade to latest version of supervisor using pip

pip install supervisor==3.3.3

In case you can't upgrade your supervisor for some reason (which i strongly recommend as they recently had XML-RPC vulnerability which allows command execution), then you would need to create a shell script

start_mongo.sh

#!/bin/bash
cd /home/user/socialhub/
exec docker-compose up

Make sure to chmod +x start_mongo.sh and change the command to /path/to/start_mongo.sh

Upvotes: 2

Related Questions