Nach reboot ist file weg

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    nach reboot ist immer file stuck.fflg weg.
    Ich lege es an mit: sudo touch -f /opt/check_lan/stuck.fflg
    Nach sudo updatedb, kann ich es im Ordner /opt/check_lan sehen.
    Das dazugehoerige script funktioniert dann auch.
    Nach reboot ist das file aber dann weg und das script funktioniert nicht mehr.


    Dieser code ist aus dem forum kopiert:

    Einmal editiert, zuletzt von gwaag (4. August 2014 um 12:00)


  • Nach reboot ist das file aber dann weg und das script funktioniert nicht mehr.

    Code
    FFLAG="/opt/check_lan/stuck.fflg"
    
    
                    rm -f $FFLAG 2>/dev/null
    
        rm -f $FFLAG 2>/dev/null


    Was bewirken diese Zeilen mit "rm" (siehe oben)?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Was das Script macht:

    Spoiler anzeigen
    Code
    # ping test
    $PING -c $PING_COUNT $IP_FOR_TEST > /dev/null 2> /dev/null

    Wie die Zeile bereits verrät, pingt es ein mal $IP_FOR_TEST und leitet die ping Ausgabe in den Mülleimer, da unwichtig (anstatt "> /dev/null 2> /dev/null" wäre aber "> /dev/null 2>&1" eleganter. Kurz dazu: Standard Output (stdout) befindet sich im Kanal 1, Standard Error (stderr) befindet sich im Kanal 2)

    Code
    if [ $? -ge 1 ]
    then

    Das ist eine Bedingungsüberprüfung

    $? enthällt den Rückgabewert des zuvor ausgeführten Befehls. Ein Programm usw gibt 0 bei Erfolg zurück und 1 oder 2 oder 3 usw bei einem Fehler.
    -ge steht für: greater or equal ... Also wird da geprüft ob der Rückgabewert des Ping Befehls "größer oder gleich 1" ist

    Code
    logger "$INTERFACE seems to be down, trying to bring it up..."
            if [ -e $FFLAG ]
            then
                    logger "$INTERFACE is still down, REBOOT to recover ..."
                    rm -f $FFLAG 2>/dev/null
                    sudo reboot

    Dieser Teil wird ausgeführt sofern die Bedingungsüberprüfung zutrifft und der Rückgabewert vom Ping Befehl "größer oder gleich 1" ist.
    logger ist ein Hilfsprogramm um etwas ins Logfile /var/log/syslog einzutragen.

    Danach erfolgt eine erneute Bedingungsüberprüfung aber diesmal wird geprüft ob die Datei $FFLAG existiert. Wenn das zutrifft wird wieder logger aufgerufen, die Datei gelöscht und anschließend das System rebootet.

    Code
    else
                    touch $FFLAG
                    logger $(sudo $IFDOWN $INTERFACE)
                    sleep 10
                    logger $(sudo $IFUP $INTERFACE)
            fi

    Dieser Teil wird ausgeführt wenn die "if [ -e $FFLAG ]" Bedingungsüberprüfung nicht zutrifft.
    Der touch Befehl erzeugt eine leere Datei mit aktuellem Zeitstempel.
    Beim logger Befehl wird diesmal ein Befehl ausgeführt und dessen Rückgabewert ins Logfile /var/log/syslog geschrieben. Eine andere geläufige Schreibweise für zB $(ls) ist auch `ls`, aber die hier verwendete ist imho schöner/besser.
    sleep 10 hält das Script für 10 Sekunden an bevor es weiter macht, das soll hier sicherstellen dass der vorherige Befehl tatsächlich genug Zeit hatte umgesetzt zu werden.
    Überall wo ein ' if ' steht muss irgendwo auch ein ' fi ' stehen um das Ende der Bedingungsüberprüfungs-Schleife zu markieren. Ist gleichzusetzen mit zB einem #endif

    Code
    else
    #    logger "$INTERFACE is up"
        rm -f $FFLAG 2>/dev/null
    fi

    Dieser Teil wird ausgeführt wenn die "if [ $? -ge 1 ]" Bedingungsüberprüfung nicht zutrifft.
    Trifft die "if [ $? -ge 1 ]" Bedingungsüberprüfung nicht zu wird der andere Code der über diesem else steht ebenfalls nicht ausgeführt.


    Mehr dazu kann man auch hier nachlesen: http://wiki.ubuntuusers.de/Shell/Bash-Skr…r_Anf%C3%A4nger

    Deine Frage wie der Code aussehen müsste kann man nur beantworten wenn man wüsste was du erreichen/bezwecken willst

  • Hallo Meigrafd,


    Deine Frage wie der Code aussehen müsste kann man nur beantworten wenn man wüsste was du erreichen/bezwecken willst

    Hm, offensichtlich erwartet gwaag etwas anderes als das von ihm genutzte Skript macht.

    Da dort eindeutig die Datei gelöscht wird, sollte ein

    Code
    # rm -f $FFLAG 2>/dev/null

    genügen.

    Oder gleich ganz raus damit...

    ______________________________________________

    Mir stellt sich dann die Frage, was einen dazu bewegen könnte, ein Skript einzusetzen, von dem man so gar keine Vorstellungen hat, was das Skript eigentlich treibt. Denn stünde etwas wie

    Code
    rm -r Verzeichnis

    wären alle Verzeichnisse rekursiv gelöscht und das genannte Verzeichnis wäre auch gleich verschwunden. Bei der richtigen Wahl des Verzeichnisses wäre der Schaden beträchtlich.

    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (4. August 2014 um 12:54)

  • Mit anderen Worten:

    Ja, rm -f DATEI löscht DATEI ohne Nachfrage -f = force nach zu lesen in der man-page ( man rm )

    Und zu deiner 2. Frage, eigentlich scheint das Skript ok. Ich würde nur entwerder $PATH setzen oder alle Befehle mit vollem Pfad angeben, wenn es via cron läuft.

    Vor allem warum meintst du funktioniert dein Skript nicht mehr nach einem reboot?

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Bevor man sich den Kopf über möglichen Sinn und Zweck dieses Scripts zermartert, einfach darauf hoffen das der TE erklärt wieso er das Script nutzen möchte, was er sich durchs benutzen dieses Scripts erhofft, was bei ihm erreicht werden soll - und vorallem wo er das Script her hat (denn die Infos das es hier aus dem Forum stammt ist nicht wirklich hilfreich)

  • Hallo,
    file ist von: Auto reboot if conection lost.
    http://www.raspberrypi.org/forums/viewtopic.php?f=30&t=20149, Beitrag 394

    Dieses script habe ich genau nach Anleitung kopiert und ausgefuehrt.

    Man kann ja auch mal annehmen das etwas das gepostet wird funktioniert, ohne alles bis ins Detail selber zu wissen............

    Es pingt ueber cronjob alle x min. den router an. Ist router nicht erreichbar macht es einen reboot.

    Edit: habe jetzt "sudo touch -f /opt/check_lan/stuck.fflg" noch im script eingefuegt, und den letzten rm -f mit # geblockt, jetzt geht es.

    Code vom ersten post aktualisiert.

    gruss
    gwaag

    Einmal editiert, zuletzt von gwaag (4. August 2014 um 11:59)


  • Dieses script habe ich genau nach Anleitung kopiert und ausgefuehrt.


    In der "Anleitung" steht, dass das Script in die Datei "check_lan.sh" kopiert/erstellt werden soll:

    Code
    sudo nano /opt/check_lan.sh

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (4. August 2014 um 11:57)

  • Naja "aus dem Forum" verstehen wir hier nicht so als dass es aus dem raspberrypi.org Forum Stammt.... but whatever

    Das Script funktioniert genau so wie es soll, egal ob die Datei /opt/check_lan/stuck.fflg nach einem Reboot existiert oder nicht. Versteht man den Code versteht man auch Wieso

    Pingt dass Script deinen Router, der aber nicht erreichbar ist (warum auch immer) wird ein Reboot durchgeführt sofern das File /opt/check_lan/stuck.fflg existiert.
    Existert das File aber nicht wird es angelegt!
    Auch löscht das Script das File aber auch selber - also spielt es letztlich keine Rolle ob das File nach einem Reboot noch da ist oder nicht, es mag vielleicht nur beim ersten Durchlauf nicht ganz so funktionieren wie es sollte aber spätestens zum 2. Durchlauf gehts dann so wie es soll


    Aber es bleibt weiterhin die Frage offen Wieso du das Script nutzen möchtest?

    Denn das der Beitrag gut 2 Jahre alt ist siehst du hoffentlich? Damals war der PI gerade erst erschienen und das Betriebssystem noch nicht fehlerfrei - da brauchte man sowas noch... Heutzutage aber eigentlich nicht mehr - deshalb noch mals die Frage an Dich Was du dir erhoffst damit zu lösen?

    Edit: habe jetzt "sudo touch -f /opt/check_lan/stuck.fflg" noch im script eingefuegt, und den letzten rm -f mit # geblockt, jetzt geht es.

    Code vom ersten post aktualisiert.

    Das macht den Sinn des Scripts nun aber völlig kaputt!

    Bitte verstehe erst was das Script überhaupt macht und wie die Abläufe sind bevor du dadrin herum pfuschst.
    Deine Änderung sorgt jetzt dafür dass er immer einen Reboot ausführt sofern der Router nicht pingbar ist... Was aber auch Andere Gründe haben kann... Dazu könnte man die Hälfte des Scripts nun aber auch weglassen und die existens des Files völlig ignorieren da völliger quatsch --- Man tausche den Motor eines Autos aus weil es mit einem kaputten Reifen nicht mehr fährt...
    (mal davon abgesehen das root kein sudo brauch und -f beim touch nicht existiert ...)

    Beantworte doch bitte einfach die Frage was bei dir das Problem is und was du erreichen möchtest

  • Nebenbei sind deine Änderungen nicht sinnig, denn in dem Moment wo der angepingte Host nicht reagiert, rebootest du immer deinen Pi. anstatt wie vorher zu versuchen ob eth0 sich nicht auch so wieder zum Starten überreden lässt....
    Denn das ist es was das Skript macht - unabhängig davon was du erreichen willst.

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Hallo gwaag,

    hättest Du gleich im ersten Beitrag gesagt, um was es Dir geht, hätte ich Dir einen besseren Tip geben können, nämlich den hier:

    Nutze die Forensuche und suche nach "Mysterium". In einem Thread von mir ist ein Workaround, der Dir die Verbindung wieder herstellt, ohne zu rebooten.

    Jedesmal einen Reboot durchzuführen, wenn die Verbindung verloren gegangen ist, halte ich für keine optimale Lösung - zumal auch deswegen, weil das Rebooten die Ursache (meistens Stromprobleme) nicht beseitigt. Die fehlenden Informationen werden zwar beim Rebooten kurzfristig bereitgestellt - mittel- und langfristig bieten sie jedoch keine Lösung. Das Mysterium schlägt gnadenlos zu - immer dann, wenn man am wenigsten damit rechnet.

    Ich habe mir dadurch Abhilfe geschaffen, indem ich alle Verbraucher über einen aktiven USB-Hub betreibe. Seitdem hat mein Programm nichts mehr festgestellt.

    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (4. August 2014 um 12:52)

  • Andreas,
    ich betreibe einen meiner PI im Kioskmode.
    Dort wird eine Monitoring Übersicht angezeigt welche von einem Server kommt.
    Wenn jetzt die Verbindung weg ist kommt es schon mal vor das die ganzen Refresh ( sowohl js als auch meta ) fehlschlagen.
    Ich checke auch alle 5 min die IP des Router und wenn er weg ist dann reboote ich um Chromium und die Webseite wieder in einen konsistenten Zustand zu bekommen.

    Ein Reboot ist also von der Anwendung daninter sinvoll oder nicht.
    Eine pauschale Aussage ist nicht OK.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Genau so ist es. Danke an alle.
    gruss
    gwaag

    :s aha und nun sterben wir alle doof :lol:

    EDIT: hat einer hier verstanden was sein Ziel war und warum ?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (4. August 2014 um 13:51)


  • Hallo Imperator,

    genau da setzt ja mein Programm an. Es überprüft die Verbindung. Ist diese mal unterbrochen, wird nicht ein stupider Reboot ausgeführt, sondern die Dateien des Betriebssystems "korrigiert" und damit die Sache am Laufen gehalten. Übertragen auf Dein Kiosksystem hättest Du maximale Ausfallzeiten von ca. 2 Sekunden - wenn das Programm die unterbrochene Verbindung vor der Internetanwendung entdeckt, würdest Du von der "Reparatur" noch nicht einmal etwas merken.

    Ein Reboot ist meiner Meinung nach hier kein Mittel, das empfohlen werden sollte. Es hilft auch nicht immer.

    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Da muss ich Andreas wirklich mal Recht geben - ein System alle Naselang zu rebooten ist quatsch. Das ist Linux und nicht Windoof.

    Zu dem Kioskproblem wäre der nächste Schritt den Browser neu zu starten, oder einen Refresh zu veranlassen. Nur deshalb gleich die ganze Kiste zu rebooten ist ehrlich gesagt ziemlich faul.

  • :s aha und nun sterben wir alle doof :lol:

    EDIT: hat einer hier verstanden was sein Ziel war und warum ?

    Hallo Jar,

    man kann zwar immer alles wissen wollen - aber nicht mehr verstehen können. Es geht einfach nicht (mehr), es ist wie andauernd so: :wallbash:
    Als alterndes Säugetier schreibe ich es der hohen Anzahl an Jahren zu, die ich schon hinter mir habe. :cool:

    Und irgendwie muss ich auch nicht mehr alles verstehen. Wie sagte doch jemand, der durch Wissen überzeugt: "Ich habe schon mehr vergessen, als Sie jemals verstanden haben!". Wenn nicht, dann einfach so =( und so :stumm:

    Aber man kann auch einfach so: :@ - das hilft auch!

    Es kommen wieder Threads, bei denen wir beide durchblicken :s. :thumbs1: Hoffentlich...

    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • wäre trotzdem schöner wenn nach [ERLEDIGT] wenigstens die Aufklärung käme obs geholfen hat oder der TO aufgibt und was das Ziel war, das könnte anderen auch helfen (und darum geht es hier doch ?)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!