Supervisor startet den Prozess nicht neu

1963
srj0408

Ich verwende Supervisor, um einen Prozess zu überwachen, der ein kleines Bash-Skript ist, um einen Befehl auszuführen. Hier ist meine Supervisor-Prozess-Konfigurationsdatei

 [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 

Wenn ich das Protokoll des Supervisors in / var / log / supervisor sehe, finde ich

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 

Ich habe keinen Tippfehler in der Worker-Konfigurationsdatei gefunden, und ich kann nicht herausfinden, warum Supervisor den Prozess nicht neu starten kann, wenn ich ihn manuell mit Hilfe von töte sudo kill <PID>

Edit -1: Nach einigen Vorschlägen hier bei diesem Link, startsecs =0 aber wenn ich das Protokoll überprüfe, wird das Skript immer wieder ngrokneu gestartet. Deshalb wird das Erstellen von Tunneln jede Sekunde neu, was nicht wünschenswert ist.

Hier ist mein bashscriot, um ngrok von bashscript auszuführen

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

1 Antwort auf die Frage

2
logix

Ich glaube, das Problem liegt am kaufmännischen Und (&) am Ende Ihres Skripts. Das Senden des Befehls ngrok in den Hintergrund, den der Supervisord als Dienstunterbrechung erkennt. Es ist nicht notwendig, Prozesse mit Supervisord im Hintergrund auszuführen.

Warum sollten Sie ein bash-Skript verwenden, um ngrok zu starten, anstatt es direkt aus der Supervisord-Konfigurationsdatei zu starten? So etwas wie:

[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 
Ich tat genau das Gleiche, anstatt es vom Skript aus zu starten, führe ich den Befehl direkt aus der Supervisor-Konfigurationsdatei aus und es funktionierte einwandfrei. srj0408 vor 6 Jahren 0