Я использую супервизор для мониторинга процесса, который представляет собой небольшой 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 создает новый туннель каждую 1 секунду, что нежелательно ,

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

#!/bin/bash

sudo ngrok tcp 22 --config=/home/pi/.ngrok2/ngrok.yml  --log=stdout > /home/pi/ngrok.log &

1 ответ1

2

Я считаю, что проблема с амперсандом (&) в конце вашего сценария. Это отправка команды 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .