supervisor não está reiniciando o processo

0

Estou usando o supervisor para monitorar um processo que é um pequeno script bash para executar um comando. Aqui está o meu arquivo de configuração do processo do supervisor

 [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

quando vejo o log do supervisor em / var / log / supervisor eu encontro

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

Não encontrei nenhum erro de digitação no arquivo de configuração do trabalhador e não consegui descobrir por que o supervisor não pode reiniciar o processo se eu o eliminar manualmente usando sudo kill <PID>

Editar -1: de acordo com algumas sugestões aqui neste link startsecs =0 mas quando eu verificar o log, é como, este comando está reiniciando o script de novo e de novo e é por isso que ngrok está criando um novo túnel a cada 1 segundo, o que não é desejável.

Aqui está o meu bashscriot para executar o ngrok a partir do bashscript

#!/bin/bash

sudo ngrok tcp 22 --config=/home/pi/.ngrok2/ngrok.yml  --log=stdout > /home/pi/ngrok.log &
    
por srj0408 08.05.2017 / 22:13

1 resposta

2

Eu acredito que o problema é com o "e" comercial (&) no final do seu script. Isso está enviando o comando ngrok para o plano de fundo que o supervisord reconhece quando o serviço é interrompido. Não há necessidade de executar processos em segundo plano com o supervisord.

Além disso, por que usar um script bash para iniciar o ngrok em vez de iniciá-lo diretamente a partir do arquivo de configuração do supervisord? Algo como:

[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
    
por 09.05.2017 / 22:38