Назад | Перейти на главную страницу

как обойти «вошел в состояние FATAL, слишком много попыток запуска слишком быстро» в супервизоре

Я просто тестирую своего супервизора с простой конфигурацией программы:

[program:test]
command=python -c "print 'hello'"
autostart=true                
autorestart=true
exitcodes=1
user=ratdon
stdout_logfile=/opt/log/test.log
stderr_logfile=/opt/log/test.log

Начиная мой руководитель как sudo supervisord -n -c /opt/supervisord.conf &. Но после нескольких нерестов он снова перестает нереститься.

2016-02-01 11:17:58,973 CRIT Supervisor running as root (no user in config file)
2016-02-01 11:17:58,973 WARN Included extra file "/opt/test.ini" during parsing
2016-02-01 11:17:58,994 INFO RPC interface 'supervisor' initialized
2016-02-01 11:17:58,994 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2016-02-01 11:17:58,995 INFO supervisord started with pid 19644
2016-02-01 11:17:59,998 INFO spawned: 'test' with pid 19648
2016-02-01 11:18:00,026 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:01,030 INFO spawned: 'test' with pid 19650
2016-02-01 11:18:01,064 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:03,072 INFO spawned: 'test' with pid 19653
2016-02-01 11:18:03,104 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:06,108 INFO spawned: 'test' with pid 19657
2016-02-01 11:18:06,138 INFO exited: test (exit status 0; not expected)
2016-02-01 11:18:07,139 INFO gave up: test entered FATAL state, too many start retries too quickly

Я хочу, чтобы супервизор продолжал перезапускать программу, пока я не остановлю супервизора.

Является ли это возможным? Если да, то как это сделать?

Есть ли возможность заставить супервайзера регистрировать stdout с меткой времени или нам нужно поставить метку времени в stdout сам?

Я столкнулся с таким же вариантом использования при работе над средой микросервисов Docker. В моем случае была вероятность того, что Nginx запустился до того, как была создана его динамически сгенерированная конфигурация.

В настоящее время нет возможности позволить Supervisord перезапускать службу бесконечно до тех пор, пока процесс не запустится успешно.

Однако существует возможный обходной путь, используя startretries вариант. С startretries Опция Supervisord перезапустится заданное количество раз или до тех пор, пока процесс не запустится успешно.

В моем конкретном случае использования временные рамки для состояния гонки были меньше секунды, поэтому установка startretries=2 было достаточно. Однако при необходимости вы можете установить гораздо более высокое значение.

[program:test]
startretries=10

На самом деле лучший способ - назначить приоритет запущенной программе.

[program:x]
priority=1
[program:y]
priority=2    

обратите внимание, что меньшие числа указывают на более высокий порядок запуска и, конечно же, включают большое количество повторных попыток