руководитель не перезапускает процесс

1867
srj0408

Я использую супервизор для мониторинга процесса, который представляет собой небольшой bash-скрипт для запуска команды. Вот мой файл конфигурации процесса супервизора

 [program:ngrok_worker] command=/home/pi/scripts/remoteacess.sh autostart=true autorestart=true stdout_logfile=/tmp/ngrok-worker.log stderr_logfile=/var/log/supervisor/test.err.log redirect_stderr=true 

когда я вижу журнал супервизора в / var / log / supervisor, я нахожу

2017-05-08 19:56:23,089 INFO gave up: ngrok_worker entered FATAL state, too many start retries too quickly 2017-05-08 19:59:14,748 INFO spawned: 'ngrok_worker' with pid 16807 2017-05-08 19:59:14,879 INFO exited: ngrok_worker (exit status 0; not expected) 2017-05-08 19:59:15,901 INFO spawned: 'ngrok_worker' with pid 16817 2017-05-08 19:59:16,212 INFO exited: ngrok_worker (exit status 0; not expected) 2017-05-08 19:59:18,261 INFO spawned: 'ngrok_worker' with pid 16830 2017-05-08 19:59:18,731 INFO exited: ngrok_worker (exit status 0; not expected) 2017-05-08 19:59:21,789 INFO spawned: 'ngrok_worker' with pid 16882 2017-05-08 19:59:22,111 INFO exited: ngrok_worker (exit status 0; not expected) 2017-05-08 19:59:23,115 INFO gave up: ngrok_worker entered FATAL state, too many start retries too quickly 

Я не нашел ни одной ошибки опечатки в рабочем файле конфигурации, и я не могу выяснить, почему супервизор не может перезапустить процесс, если я убил его вручную, используя sudo kill <PID>

Редактировать -1: согласно некоторым предложениям здесь по этой ссылке, startsecs =0 но когда я проверяю журнал, похоже, эта команда перезапускает скрипт снова и снова, и именно поэтому ngrokкаждую секунду создается новый туннель, что нежелательно.

Вот мой bashscriot для запуска ngrok из bashscript

#!/bin/bash  sudo ngrok tcp 22 --config=/home/pi/.ngrok2/ngrok.yml --log=stdout > /home/pi/ngrok.log & 
0

1 ответ на вопрос

2
logix

Я считаю, что проблема с амперсандом (&) в конце вашего сценария. Это отправка команды ngrok в фоновый режим, который супервизор распознает как остановку службы. Нет необходимости запускать процессы в фоновом режиме с помощью supervisord.

Кроме того, зачем использовать bash-скрипт для запуска ngrok, а не запускать его прямо из конфигурационного файла supervisord? Что-то вроде:

[program:ngrok_worker] command=ngrok tcp 22 --config=/home/pi/.ngrok2/ngrok.yml autostart=true autorestart=true stdout_logfile=/tmp/ngrok-worker.log stderr_logfile=/var/log/supervisor/test.err.log redirect_stderr=true 
Я сделал то же самое, вместо того, чтобы запустить его из скрипта, я запустил команду прямо из файла конфигурации супервизора, и она отлично работала. srj0408 6 лет назад 0

Похожие вопросы