2017-11-07 1 views
1
aufgerufen

Ich habe ein Skript (nennen wir es Beobachter), die für einen bestimmten Prozess überprüft, wenn es nicht läuft der Beobachter wird den Prozess über ein Skript starten.Prozess nicht vollständig gestartet, wenn innerhalb crontab

Ich führe diesen Watcher in Crontab in jeder Minute. Nun, das Problem ist, dass es nicht in crontab funktioniert, sondern funktioniert, wenn ich den Watcher direkt von der Kommandozeile aus starte.

Angenommen, der Watcher startet eine Skriptdatei namens serverA.

ServerA Code

echo -n "Starting $NAME: " 

# start network server 
start-stop-daemon --start --background --make-pidfile \ 
    --pidfile $net_server_pidfile --startas /bin/bash -- -c "exec $angel $net_server \ 
    -c $conf_file --lora-eui $lora_eui --lora-hw-1 $lora_hw --lora-prod-1 $lora_id \ 
    --lora-path $run_dir --db $conf_db \ 
    --noconsole >> $net_server_log 2>&1" 
sleep 2 
# start packet forwarder 
/usr/sbin/start-stop-daemon --chdir $run_dir/1 --start --background --make-pidfile \ 
    --pidfile $pkt_fwd_pidfile --exec $angel -- $pkt_fwd 

renice -n -20 -p $(pgrep lora-network-se) 
renice -n -20 -p $(pgrep $(basename $pkt_fwd)) 

echo "OK" 

nun direkt von der serverA wenn ich Beobachter laufen irgendwann etwas Ausgabe starten dann nach Echo wird weiter mit OK am Ende.

Aber in Crontab Logs sehe ich nicht das OK, aufgrund dessen der Service nie abgeschlossen und ServerA nie startet.

watcher.sh

else 
       echo "$(date) do something, no packet forwader runnig" 
       exec /etc/init.d/lora-network-server start 

     fi 

Antwort

0

Ich denke, dass Sie Unterschiede der Laufzeitumgebung basierend Terminal oder nicht überprüfen müssen.

Erstens Überprüfen Sie den Lora-Netzwerk-Server, ob abhängig von Shell-Umgebungen, wie JAVA_HOME oder PATH (z. B. kann die Binärdatei ohne absoluten Pfad der Binärdatei ausführen).

Wenn es andere Einstellungen hat, werden dieselben Shell-Umgebungen erstellt.

Zum Beispiel, wie man zwischen Cron env und Laufzeitumgebung diff.

Laufzeit

$ env | tee ./runtime.output 

cron

$ crontab <<EOF 
* * * * * /bin/env > /path/to/cron.output 2>&1 
EOF 

Oberhalb cron Ausgang wird nach 1 Minute, erstellen und die cront nach dem Test entfernen.

können Sie die Variablen auf cron.output überprüfen und

Ich hoffe, dies wird Ihnen helfen runtime.output.

+0

Wie überprüfe ich die Umgebungseinstellungen der serverA-Datei? – ashusvirus

+0

Hi @ashusvirus, ich habe weitere Informationen hinzugefügt, die Sie möchten. – Daein

+0

Hallo @Daein es sagt '/ bin/sh:/bin/env: Keine solche Datei oder Verzeichnis' – ashusvirus

0

Cron läuft mit einer meist leeren Umgebung. Setzen Sie alle erforderlichen Umgebungsvariablen in Ihren Skripten?

Verwandte Themen