Ungewollter Skriptabbruch

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Daresch
Beiträge: 4
Registriert: 09.08.2015 00:03:39

Ungewollter Skriptabbruch

Beitrag von Daresch » 13.08.2015 22:35:55

Hallo, ich möchte ein Skript haben, was unter anderem zunächst die Netzwerkverbindung trennt und anschließend einen USB-Chip deaktiviert. Nach einer bestimmten Wartezeit wird dies wieder rückgängig gemacht.

Mein Problem ist nun, dass das Skript nach einer Wartezeit (meist 17 Minuten, kann aber auch bis zu 45 Minuten sein) scheinbar einfach abgebrochen wird oder sich aufhängt. Stark vereinfacht sieht das Skript im Grunde so aus:

Code: Alles auswählen

...mache etwas...

# Netzwerkverbindung ausschalten
echo "Netzwerk ausschalten" >> $LOGFILE
/etc/init.d/networking stop

# Buspower ausschalten
echo "Buspower ausschalten" >> $LOGFILE
echo 0 > /sys/devices/platform/bcm2708_usb/buspower

# Warten
zaehler1=0
zaehler2=0
while [ $zaehler2 -lt $WartezeitInSekunden ]; do
        zaehler1=$(($zaehler1+1))
        zaehler2=$(($zaehler2+1))
        if [ $zaehler1 -ge 60 ]; then
                zaehler1=0
                echo "$(date +%Y-%m-%d_%R:%S)" >> $LOGFILE
        fi
        sleep 1
done

# Buspower einschalten
echo "Buspower einschalten" >> $LOGFILE
echo 1 > /sys/devices/platform/bcm2708_usb/buspower
sleep 5

# Netzwerkverbindung einschalten
echo "Netzwerk starten" >> $LOGFILE
/etc/init.d/networking start

...mache was...
Da ich per SSH darauf zugreife schreibe ich mir ein paar Meldungen in eine Log-Datei. In der while-Schleife lass ich jede Minute die Zeit in die Log-Datei während des wartens schreiben. Nach der oben erwähnten Zeit, kommt keine neue Zeile mehr hinzu. Auch die Meldungen zum einschalten der Buspower und des startens des Netzwerks sind dort nicht mehr drinnen. Daher gehe ich davon aus, dass das Skript abgebrochen wird.

Sind diese Befehle zum ausschalten der Buspowre, bzw. stoppen des Netzwerks nicht im Skript, läuft es korrekt durch. Ich weiß gerade nicht wo ich da gucken kann woran es liegt. Vielleicht hat jemand von euch ja eine Idee.

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ungewollter Skriptabbruch

Beitrag von Meillo » 14.08.2015 00:11:01

Am ehesten scheint mir der Fehler in dem Warteschleifenkonstrukt zu liegen. Nimm lieber ein einfaches ``sleep 1234'' und verzichte auf die minuetlichen Logeintrage.

Wenn du wissen willst, ob der Prozess noch laeuft, kannst du ps(1) verwenden, z.B. als ``ps axf'', oder in der Luxusvariante fuer breite Terminals: ``ps auxfww''.

Evtl. solltest du dein Script mit nohup(1) starten.
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Ungewollter Skriptabbruch

Beitrag von heisenberg » 14.08.2015 00:29:00

  • Lass das Script dochmal im Vordergrund im screen (Ggf, Paket screen installieren. ) laufen und trenne dich dann von der Session. Siehe Doku: Screen
  • Schreibe vor den kritischen Bereich ein set -x. Damit werden Befehle vor der Ausführung angezeigt und du siehst die letzten Befehle vor dem Abbruch
  • Dem Rat von Meillo schliesse ich mich an. Nimm ein einfaches Sleep, das wird dir das Debugging erleichtern

Daresch
Beiträge: 4
Registriert: 09.08.2015 00:03:39

Re: Ungewollter Skriptabbruch

Beitrag von Daresch » 14.08.2015 22:28:41

Danke euch beiden schonmal.

Das mit dem Sleep-Befehl, wie Meillo geschrieben hat, hatte ich auch schon ausprobiert. Da ist das selbe Problem. Die Schleife habe ich nur dazu erstellt um zu gucken, ob überhaupt etwas während der Wartezeit gemacht wird.

Den Rest werde ich dann am Sonntag ausprobieren. War heute den ganzen Tag unterwegs und auch morgen bin ich nur auf Achse.

In diesem Sinne erstmal ein angenemes Wochenende. Ich melde mich dann nochmal.

Daresch
Beiträge: 4
Registriert: 09.08.2015 00:03:39

Re: Ungewollter Skriptabbruch

Beitrag von Daresch » 18.08.2015 12:13:37

In zwei Test hat es bis jetzt funktioniert. Ich werde das nochmal heute über Nacht testen und falls erfolgreich als gelöst markieren.

Den entscheidenden Hinweis gab mir der Wiki-Eintrag vom Programm screen den Meillo gepostet hatte. Dort heißt es unter anderem:
Ein Anwendungsbeispiel: Man meldet sich an seinem Server mittels SSH an und startet ein Programm. Beendet man nun die SSH-Sitzung, wird auch das Programm beendet.
Da ich bei mir die Netzwerkverbindung durch das Skript getrennt hatte, wurde vermutlich durch ein timeout die Sitzung beendet, bei einer längeren Trennungszeit. Bei den Tests mit screen lief es weiter.

Benutzeravatar
Meillo
Moderator
Beiträge: 9235
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ungewollter Skriptabbruch

Beitrag von Meillo » 18.08.2015 13:57:45

Daresch hat geschrieben: Den entscheidenden Hinweis gab mir der Wiki-Eintrag vom Programm screen den Meillo gepostet hatte.
heisenberg hat den Hinweis gepostet, nicht ich.

Ich habe nur nohup eingeworfen, mit dem man das gleiche Problem (auf etwas andere Weise) ebenfalls loesen kann.
Use ed once in a while!

Daresch
Beiträge: 4
Registriert: 09.08.2015 00:03:39

Re: Ungewollter Skriptabbruch

Beitrag von Daresch » 18.08.2015 17:34:52

Meillo hat geschrieben:
Daresch hat geschrieben: Den entscheidenden Hinweis gab mir der Wiki-Eintrag vom Programm screen den Meillo gepostet hatte.
heisenberg hat den Hinweis gepostet, nicht ich.
Oh, natürlich heisenberg. Ich entschuldige mich für die Verwechslung.

screen habe ich genutzt, weil ich darüber vor einiger Zeit schonmal etwas gelesen hatte.

Antworten