Guten Abend,
ich wollte mal fragen ob es möglich wäre den Pi zu sagen das er automatisch jede Nacht um 4 Uhr automatisch neu startet?
Und ist es möglich ihn automatisch Updates durchführen zu lassen?
Danke für eure schnellen Antworten.
Phylus
Guten Abend,
ich wollte mal fragen ob es möglich wäre den Pi zu sagen das er automatisch jede Nacht um 4 Uhr automatisch neu startet?
Und ist es möglich ihn automatisch Updates durchführen zu lassen?
Danke für eure schnellen Antworten.
Phylus
Automatisch Neustarten und Updates? Schau mal ob du hier fündig wirst!
Hi,
einfach mit:
eine neue Datei erstellen. Dann kommt folgendes da rein:
Jetzt nur noch mit:
einen Cronjob erstellen. In der letzten Zeile muss folgendes rein:
Hoffe ich konnte dir helfen ;D
ph0ne3G
Danke hört sich sehr gut an =D
Aber bei den Sternen in Crontab müssten das doch 5 sein oder? also * 4 * * * ?
Also macht der Pi erst update und dann Upgrade und wenn das durch ist macht er nen reboot?
Vielen Dank für deine Antwort.
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:
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:
#!/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:
#!/bin/bash
## Create Log? [0=no , 1=yes]
LOG=1
LOGFILE=/var/log/UPGRADE.log
# Maximale Logfile Grösse in Bytes? (leer lassen falls unbegrenzt) (512000 bytes = 500 kilobytes = 0.48 megabytes)
MAXLOGSIZE="512000"
# falls MAXLOGSIZE genutzt wird: Logfile rotieren(1) oder löschen(0)?
LOGROTATE=0
# -------------------------------------------------------------- #
# >>> >> > DO NOT MESS WiTH ANYTHiNG BELOW THiS LiNE! < << <<< #
# -------------------------------------------------------------- #
# write and check log
_LOG() {
if [ -n "$LOGFILE" ]; then
#check size of logfile
if [ -n "$MAXLOGSIZE" ] && [ -f "$LOGFILE" ] && [ "$(stat --printf="%s" $LOGFILE)" -gt "$MAXLOGSIZE" ]; then
if [ "$LOGROTATE" = 1 ]; then
echo "rotating logfile $LOGFILE"
mv -f $LOGFILE ${LOGFILE}.1 >/dev/null 2>&1
else
echo "deleting logfile $LOGFILE"
rm -f $LOGFILE >/dev/null 2>&1
fi
touch $LOGFILE
fi
echo "[$(date +"%d.%m.%Y %H:%M:%S")] $1" >> $LOGFILE
fi
}
apt-get update
[ ! -z "$LOG" -a "$LOG" == 1 ] && _LOG "$(apt-get upgrade -s)"
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")
[ "$CurrentDate" == "$rpiupdateDate" ] && reboot
exit 0
Alles anzeigen
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
Hab aber nun folgendes Problem:
Also habe ich mir denn Teil des Codes der nicht will zum Testen und "rumspielen" in ein kleines Script gepackt
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
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
Du solltest das schon so machen wie ich oben angegeben habe - ohne irgendwo Leerzeichen einzufügen die in meinem Code aber garnicht vorhanden sind... sowas wie "$ (" funktioniert in bash nicht
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
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)
Ah alles klar :thumbs1:
Vielen Dank
Dachte sh steht für Bash naja man lernt nie aus trozdem vielen Danke
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
Niemand ne Lösung?!
:thumbs1:
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:
ZitatAlles anzeigen
[01.12.2014 07:01:24] Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
libflac8
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst libflac8 [1.2.1-6] (1.2.1-6+deb7u1 Raspbian:7.0/stable [armhf])
Conf (1.2.1-6+deb7u1 Raspbian:7.0/stable [armhf])
[02.12.2014 07:01:06] Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
libflac8
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst libflac8 [1.2.1-6] (1.2.1-6+deb7u1 Raspbian:7.0/stable [armhf])
Conf (1.2.1-6+deb7u1 Raspbian:7.0/stable [armhf])
[03.12.2014 07:01:22] Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
libflac8
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst libflac8 [1.2.1-6] (1.2.1-6+deb7u1 Raspbian:7.0/stable [armhf])
Conf (1.2.1-6+deb7u1 Raspbian:7.0/stable [armhf])
EDIT:
Habe dein Skript nochmals überprüft.
Liegt es evtl. am "-s" in:
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ß
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:
ZitatAlles anzeigen
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** Performing self-update
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7813 100 7813 0 0 17572 0 --:--:-- --:--:-- --:--:-- 25366
*** Relaunching after update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** Downloading specific firmware revision (this will take a few minutes)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 168 0 168 0 0 244 0 --:--:-- --:--:-- --:--:-- 355
100 23.0M 100 23.0M 0 0 333k 0 0:01:10 0:01:10 --:--:-- 183k
*** Updating firmware
*** Updating kernel modules
*** depmod 3.12.33+
*** Updating VideoCore libraries
*** Using HardFP libraries
*** Updating SDK
*** Running ldconfig
*** Storing current firmware revision
*** Deleting downloaded files
*** Syncing changes to disk
*** If no errors appeared, your firmware was successfully updated to e96026909398171c1361b1a831e58dce8c1f81f3
*** A reboot is needed to activate the new firmware
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.)
was hätte passieren müssen? apt-get uodate und rpi-update sind doch 2 vollkommen unterschiedliche sachen
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.
Wo siehst du denn da einen Fehler..oder muss ich meine Brille suchen?
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.
Ä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
#!/bin/bash
## Create Log? [0=no , 1=yes]
LOG=1
LOGFILE=/var/log/UPGRADE.log
# Maximale Logfile Grösse in Bytes? (leer lassen falls unbegrenzt) (512000 bytes = 500 kilobytes = 0.48 megabytes)
MAXLOGSIZE="512000"
# falls MAXLOGSIZE genutzt wird: Logfile rotieren(1) oder löschen(0)?
LOGROTATE=0
# -------------------------------------------------------------- #
# >>> >> > DO NOT MESS WiTH ANYTHiNG BELOW THiS LiNE! < << <<< #
# -------------------------------------------------------------- #
# write and check log
_LOG() {
if [ -n "$LOGFILE" ]; then
#check size of logfile
if [ -n "$MAXLOGSIZE" ] && [ -f "$LOGFILE" ] && [ "$(stat --printf="%s" $LOGFILE)" -gt "$MAXLOGSIZE" ]; then
if [ "$LOGROTATE" = 1 ]; then
echo "rotating logfile $LOGFILE"
mv -f $LOGFILE ${LOGFILE}.1 >/dev/null 2>&1
else
echo "deleting logfile $LOGFILE"
rm -f $LOGFILE >/dev/null 2>&1
fi
touch $LOGFILE
fi
echo "[$(date +"%d.%m.%Y %H:%M:%S")] $1" >> $LOGFILE
fi
}
apt-get update
[ ! -z "$LOG" -a "$LOG" == 1 ] && _LOG "$(apt-get upgrade -s)"
apt-get upgrade -y
if [ -d /root/.rpi-firmware/ ]; then
/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")
[ "$CurrentDate" == "$rpiupdateDate" ] && reboot
fi
exit 0
Alles anzeigen
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!