Я пытался запустить эти два при запуске моего образа докера, но они никогда не запускаются.
[supervisord]
nodaemon=true
[program:rsyslog]
command=/bin/bash "service rsyslog start"
[program:haproxy]
command=/bin/bash "service haproxy start"
Какая команда нужна для запуска обоих: сначала rsyslog, затем haproxy?
Это не сработает, потому что service ... start
команда запускает программу как демон и отправляет ее в фоновом режиме. В supervisord
не может с этим справиться, а нужно запускать их как подпроцесс и запускать в автономном режиме. Видеть Вот:
Программы, предназначенные для запуска под супервизором не должен демонизировать самих себя. Вместо этого они должен работать на переднем плане. Они не должны отсоединяться от терминала, с которого они запущены. Самый простой способ узнать, будет ли программа работать на переднем плане, - это запустить команду, вызывающую программу из приглашения оболочки. Если он возвращает вам контроль над терминалом, но продолжает работать, он демонизирует себя, и это почти наверняка будет неправильным способом запуска его под супервизором. Вы хотите запустить команду, которая, по сути, требует от вас нажатия Ctrl-C, чтобы вернуть управление терминалом. Если он возвращает вам приглашение оболочки после его запуска без необходимости нажимать Ctrl-C, это бесполезно для супервизора. У всех программ есть опции для запуска на переднем плане, но нет «стандартного способа» сделать это; вам нужно будет прочитать документацию к каждой программе.
Вот пример конфигурации программы в реальном мире из надзорная документация:
Apache 2.2.6:
[program:apache2]
command=/path/to/httpd -c "ErrorLog /dev/stdout" -DFOREGROUND
redirect_stderr=true
Сценарии запуска вашей программы могут быть хорошим местом, чтобы узнать, как программа запускается, для правильной настройки.
Некоторые примеры Вот
[supervisord]
nodaemon=true
[program:rsyslog]
command=service rsyslog start
[program:haproxy]
command=service haproxy start
Однако теперь я должен отложить запуск haproxy, поскольку haproxy требует, чтобы rsyslog был запущен заранее. Однако это другая проблема.