Automatisch Neustarten und Updates

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hi,

    einfach mit:

    Code
    sudo nano test.sh

    eine neue Datei erstellen. Dann kommt folgendes da rein:

    Bash
    #!/bin/sh
    apt-get update
    apt-get upgrade
    reboot

    Jetzt nur noch mit:

    Code
    crontab -e

    einen Cronjob erstellen. In der letzten Zeile muss folgendes rein:

    Code
    * 4 * * /home/pi/test.sh

    Hoffe ich konnte dir helfen ;D
    ph0ne3G

  • Bei " apt-get upgrade " solltest du noch ein " -y " hinzufügen damit die Nachfrage ob ggf die Pakete wirklich installiert werden sollen mit "Yes" beantwortet wird

    Allerdings: Solange nur Pakete aktualisiert werden muss man nicht neu starten! (Linux ist kein Windoof)

    Ein reboot muss du nur machen wenn ein neuer Kernel aufgespielt wurde und den kriegst du beim RaspberryPi nur über " rpi-update " - und auch da sollte man nicht einfach nach ausführen des Befehls rebooten sondern prüfen ob tatsächlich überhaupt was geupdated wurde

    Aber der Crontab Eintrag ist auch fehlerhaft!
    Zum einen fehlt da ein * aber zum anderen würde der bewirken dass das Script Jede Minute um 04:00 ausgeführt werden würde (wegen des 1. Sternchens)
    Wie das korrekt aussehen müsste wird hier erklärt: https://www.forum-raspberrypi.de/Thread-tutorial-crontab-cron-jobs

    Ausserdem würde ich prüfen ob der vorherige Befehl erfolgreich war bevor einfach rebooted wird, also wenns denn unbedingt sein muss:

    Bash
    #!/bin/sh
    apt-get update && apt-get upgrade -y && reboot

    Die " && " bewirken, dass der nachfolgende Befehl nur ausgeführt wird wenn der vorherige erfolgreich war und keinen Error erzeugt hat -- Aber wie gesagt, wegen "apt-get upgrade" brauch man nicht rebooten

    Professioneller wäre es so:

    Bash
    #!/bin/bash
    apt-get update && apt-get upgrade -y
    /usr/bin/rpi-update
    CurrentDate=$(date -d@$(date +%s) +"%H%d%m%Y")
    rpiupdateDate=$(date -d@$(stat -c %Z /root/.rpi-firmware/) +"%H%d%m%Y")
    if [ "$CurrentDate" == "$rpiupdateDate" ]; then
      reboot
    fi
    exit 0

    Damit geht aber auch nur ein Update pro Stunde: CurrentDate setzt sich zusammen als: %H = Stunde , %d = Tag , %m = Monat , %Y = Jahr ... und das von der aktuellen Zeit, wobei rpiupdateDate die Zeit der letzten Veränderung des Verzeichnisses /root/.rpi-firmware/ ist: Wurde durch rpi-update eine neue Firmware aufgespielt wurde das Verzeichniss verändert - und nur dann bringts was zu rebooten

    Aber besser fänd ichs auch noch wenn man speichern würde welche Pakete beim "apt-get upgrade" aktuallisiert werden weil das ist auch nicht immer super -- also würde das Script auf jedenfall etwas umfangreicher werden wenn man das wirklich Professionel machen würde, also in etwa so:

  • Hallo erstmal und entschuldigt das ich die Leiche hier ausgebuttelt habe ist aber genau das was ich gesucht habe...

    Und vielen Dank an "meigrafd" für deine tolle Arbeit :danke_ATDE:

    Hab aber nun folgendes Problem:

    Code
    [: 1615022014: unexpected operator


    Also habe ich mir denn Teil des Codes der nicht will zum Testen und "rumspielen" in ein kleines Script gepackt

    Code
    mkdir /home/pi/Scripte/test
    CurrentDate=$ (date -d@$ (date +%s) +"%H%d%m%Y")
    rpiupdateDate=$(date -d@$(stat -c %Z /home/pi/Scripte/test/) +"%H%d%m%Y")
    rm -rf /home/pi/Scripte/test
    [ "$CurrentDate" == "$rpiupdateDate" ] && echo Funktioniert 
    exit 0

    Das ganze führe ich dan mit sudo sh test.sh aus

    und bekomme folgendes ergebnis

    Code
    test.sh: 5: [: 1715022014: unexpected operator

    könnte mir dabei bitte jemand helfen ?

    Würde das gerne in ein Update Script verwenden um unnötige reboots zu vermeiden ...

    Besten Dank Itow

  • Hallo meigrafd vielen dank für deine zügige jedoch wenig hilfreich Antwort ...

    Deiner Anwort entsprechend hab ich den fehler in meiner unwissendheit gesucht das von dir geschriebene Script unverändert verwendet und bekomme den gleichen Fehler


    Code
    test.sh: 42: [: 1715022014: unexpected operator
    Zitat


    ...ohne irgendwo Leerzeichen einzufügen die in meinem Code aber garnicht vorhanden sind...


    Da hab ich jetzt ganz schön gegrübelt was du meinst ... aber ist mein fehler die betreffende Zeile hab ich hier noch getippt da hat sich wohl ein leerzeichen eingeschlichen direkt danach hab ich rausgefunden wie man von Putty nach Windows Copy&Paste macht Sorry

    Zum testen führe ich das ganze wie gesagt mit sudo sh test.sh aus oder ist das falsch ?

    Grüße Itow

  • Der Shebang (erste Zeile) sagt: /bin/bash
    Also führ das Script mal bitte auch mit bash aber nicht sh aus (bash ist neuer als sh und daher kann sh nicht das was bash kann)

  • Habe da ein kleines Problem :)

    Zitat

    *** A reboot is needed to activate the new firmware
    stat: Aufruf von stat für „/root/.rpi-firmware/“ nicht möglich: Datei oder Verzeichnis nicht gefunden
    date: ungültiges Datum „@“
    root@raspberrypi:~#

    vllt könnte mir da jemand helfen :)

    Greetz

  • Hallo meigrafd,

    bei mir läuft das Skript seit ca. 2 Wochen. Bis vor 3 Tagen war kein Bedarf einer Aktualisierung.
    Dann gab es am 01.12.2014 ein Upgrade für libflac8.

    Laut Logfile sei dies erfolgreich installiert worden, wird aber seither jeden Tag wiederholt (siehe Log-Auszug).
    Wo könnte der Fehler liegen?

    Log:

    EDIT:
    Habe dein Skript nochmals überprüft.
    Liegt es evtl. am "-s" in:

    Code
    apt-get update
    [ ! -z "$LOG" -a "$LOG" == 1 ] && _LOG "$(apt-get upgrade -s)"
    apt-get upgrade -y

    Weil "s" auch verdächtich nahe an "y" auf der Tastatur liegt...

    EDIT2:
    Auf help.ubuntu.com fand ich Folgendes:

    Zitat


    Use the -s flag to simulate an action."sudo apt-get -s install <package_name>" will simulate installing the package showing you what packages will be installed and configured.

    Bitte um Info.

    Gruß

    Einmal editiert, zuletzt von Meiser (3. Dezember 2014 um 12:21)

  • apt-get upgrade -s ist schon Absicht, damit er loggt was er machen könnte - damit wird der Vorgang eben simuliert aber nichts tatsächlich installiert. Die Ausgabe von apt-get upgrade -s wird ins Log geschrieben, erst anschließend wird apt-get upgrade -y ausgeführt womit er dann tatsächlich etwas installiert, wobei das "-y" für Yes steht, also eine Frage von wegen "sollen diese Pakete installiert werden [y/n]" mit y beantwortet wird.

    Wieso das Paket libflac8 bei dir nicht installiert wird kann ich so nicht sagen - kannst du mal bitte die Ausgabe von apt-get upgrade -y posten?

  • Ich hatte apt-get upgrade -y dann gestern manuell ausgeführt.
    libflac8 wurde damit erfolgreich installiert.
    Bei erneuter Eingabe des Befehls wurden keine verfügbaren Upgrades gefunden.

    Log von heute:

    Zitat


    [04.12.2014 07:01:02] Reading package lists...
    Building dependency tree...
    Reading state information...
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    Ich habe gerade den im Skript nachfolgenden Befehl /usr/bin/rpi-update ausgeführt und folgendes erhalten:

    Das hätte doch eigentlich schon längst (nach meiner crontab spätestens am 27.11.) von selbst erfolgen müssen?!

    EDIT:
    Habe das Skript mal manuell ausgeführt, mit der anschließenden Fehlermeldung (am Ende), dass der .rpi-firmware-Ordner nicht vorhanden sei.
    Eigentlich hatte ich den schon erstellt, dachte ich. Habe ja weiter oben selbst noch kluggesch***en.
    Habe das jetzt nachgeholt per sudo mkdir /root/.rpi-firmware/.
    Wenn ich das Skript jetzt ausführe, wird berichtet, dass alles auf dem aktuellen Stand sei und es wird ebenfalls bei jeder Ausführung neugestartet (weil das Datum der letzten Bearbeitung dem heutigen entspricht, wenn ich das oben richtig verstanden habe.)

    Einmal editiert, zuletzt von Meiser (4. Dezember 2014 um 22:40)

  • Das ist mir klar, bloß ich als Anfänger nehme an, dass evtl. das ganze Skript nicht einwandfrei funktioniert, wenn am Ende ein Fehler auftritt.
    Lasse mich aber gerne eines Besseren belehren.

    Einmal editiert, zuletzt von Meiser (4. Dezember 2014 um 22:39)

  • Ich habe rpi-update ausgeführt. Dann wurde aktualisiert, dann Reboot. OK.

    Dann habe ich das Skript zum Test ausgeführt und dabei kam die Meldung, dass der .rpi-firmware-Ordner nicht vorhanden sei. Jetzt behoben.

    Die Frage ist, ob das der Grund sein kann,
    weshalb auch das Paket mittels apt-get upgrade -y nicht ordentlich aktualisiert wurde,
    selbst wenn beide Befehle nichts miteinander zu tun haben, aber im gleichen Skript stehen.

    EDIT:
    Ok, also so viel ich weiß, werden die Befehle nacheinander abgearbeitet.
    Also hängt es nicht zusammen.
    Dann hat sich die rpi-update-Sache für mich geklärt.

    Aber warum das Paket libflac8 nicht ordentlich aktualisiert wurde, ist mir nach wie vor ein Rätsel.

    Einmal editiert, zuletzt von Meiser (4. Dezember 2014 um 23:07)

  • Ähm, kann es sein das du das Script in der Crontab des pi Benutzers eingetragen hast? Das würde nämlich einiges erklären..
    Auf den Ordner /root/.rpi-firmware/ hätte der pi Benutzer nämlich auch kein Zugriff.
    Aber auch wenn rpi-update vorher noch nie ausgeführt wurde gibts den Ordner natürlich noch nicht.

    Tu das Script bitte in die Crontab des root Benutzers: sudo crontab -e


    Spoiler anzeigen

Jetzt mitmachen!

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