# We launch two daemons inside the container: chasquid and dovecot. # The supervisord program will act as init, and forward signals to them from # outside the container, so shutdown/restarts/etc. is handled appropriately. [supervisord] user = root # We run with --nodaemon (as per entrypoint.sh), that implicitly makes # supervisord log to stdout _in addition_ to logfile. # So set logfile to /dev/null to avoid duplicated entries. logfile = /dev/null logfile_maxbytes = 0 [program:dovecot] command = /usr/sbin/dovecot -F -c /etc/dovecot/dovecot.conf # TODO: confirm we don't need stopasgroup, or add it. stdout_logfile = /dev/stdout stdout_logfile_maxbytes = 0 stderr_logfile = /dev/stderr stderr_logfile_maxbytes = 0 autorestart = false priority = 201 [program:chasquid] command = /usr/bin/chasquid user = chasquid group = chasquid environment = USER="chasquid" stdout_logfile = /dev/stdout stdout_logfile_maxbytes = 0 stderr_logfile = /dev/stderr stderr_logfile_maxbytes = 0 autorestart = false # chasquid doesn't _need_ dovecot to start earlier, but it will emit a warning # if dovecot auth it's not ready at startup. To minimize the chances of # problems, have supervisord start it after dovecot. Still it's not guaranteed # to be fully up by the time chasquid needs it (because it starts the # components asynchronously), but it minimizes the problem. priority = 202 # We intentionally don't auto-restart subprocesses on unexpected crashes, and # make supervisord exit if that happens. That way, whatever error caused it is # propagated to the container runner and the user can monitor and decide what # to do. [eventlistener:exit_on_process_fatal] # fatal: when the starting attempts fail (e.g. bad configuration). # exited: when it fails after starting up (e.g. random crash). # stopped: when a user wants to stop the container (e.g. requests a restart, # or a manual stop). We don't interfere with this one because it's # intentionally targeting a specific process. If the user wanted to stop the # whole container, they can. events = PROCESS_STATE_FATAL, PROCESS_STATE_EXITED priority = 100 command = /bin/bash -c ' while true; do echo "READY"; read line; kill -SIGTERM $PPID; echo "RESULT 2"; echo -n "OK"; done; '