Руководитель не перезапускает процесс
Я использую supervisor для наблюдения за процессом, который представляет собой небольшой 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 &
1 ответ
I believe the problem is with the ampersand (&) at the end of your script. That is sending the ngrok command to the background which supervisord recognizes as the service stopping. There's no need to run processes in the background with supervisord.
Also, why use a bash script to launch ngrok instead of launching it directly from the supervisord config file? Что-то вроде:
[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