Mein Magic Mirror hängt zu Hause im Büro. Da auch ich noch einer Arbeit nach gehe, die meistens auswärts stattfindet, muss der Magic Mirror natürlich nicht die ganze Zeit eingeschaltet sein. Bis jetzt habe ich meinen Spiegel einfach mit einer smarten Steckdose ein- und ausgeschaltet. Nicht ganz die feine Art, da ja auch der Raspberry ein Computer ist. Cronjob heisst das Zauberwort.
Magic Mirror runterfahren
Bis jetzt hat sich mein Magic Mirror bzw. mein Raspberry ausgeschaltet, wenn er von der Steckdose keinen Strom mehr bekommen hat. Dies ist natürlich jeweils nicht so die ganz feine Art.
Um einen Raspberry Pi korrekt runterzufahren gibt es verschiedene Befehle:
sudo shutdown
Mit diesem Kommando fährt sich der Raspberry nach einer Minute runter. Mit den nachfolgenden Befehlen macht er dies sofort:
sudo shutdown -h 0
sudo shutdown -h now
Und auch ein einleuchtender Alias steht zum runterfahre noch zur Verfügung:
sudo poweroff
Magic Mirror geplant runterfahren
Nun müssen wir nur noch diesen Befehl zu bestimmten Zeitpunkten ausführen und der Magic Mirror wird schön runtergefahren und erst anschliessend schaltet die smarte Steckdose alles aus. Dies geschieht mittels einem Cronjob.
Cronjob einrichten
Ein Cronjob führt einen Befehl zu einem bestimmten Zeitpunkt aus. Perfekt also um unserem Raspberry mitzuteilen, dass er jetzt runterfahren soll. Ein Cron bzw. einen Cronjob einzurichten, ist auch gar nicht so schwierig.
Als erstes müssen wir verstehen, wie so ein Cronjob aufgebaut ist beziehungsweise wie das Format aussieht:
* * * * * /Befehl/
Die fünf einzelne Stern stehen für folgende Zeiten:
Stern 1 * - Minuten von 0-60
Stern 2 * - Stunden von 0-24
Stern 3 * - Tage von 1-31 eines Monats
Stern 4 * - Alle Tage bestimmter Monate von 1-12
Stern 5 * - Wochentage von 0-7 (0 und 7 stehen beide für Sonntag)
Somit könnte mein Beispiel zum runterfahren folgendermassen ausschauen:
29 7 * * 1 /sudo poweroff
In normaler Sprache heisst dies:
Fahre den Raspberry, jeden Montag um 07:29 Uhr, mittels dem Befehl sudo poweroff runter.
Jetzt muss natürich dieser Befehl nicht irgendwo im Terminal eingegeben werden, sondern im Cron-Editor.
Cronjob Editor öffnen
Um den Cronjob Editor zu öffnen musst du in deiner Konsole das Kommando:
sudo crontab -e
eingeben und anschliessend öffnet sich der Cronjob Editor. Zuvor kann man noch den Editor auswählen, mit dem man den Crontab bearbeiten möchte. Ich habe den Nano-Editor ausgewählt.
Nun kannst du alle Zeitpunkte eingeben, an welcher der Magic Mirror runtergefahren werden soll. Bei mir sieht der Cronjob Editor so aus:
Hier noch meine Einträge zu kopieren (ich brauch das sicher wieder mal ;-))
#MONTAG BIS FREITAG AUSSCHALTEN AM MORGEN
29 7 * * 1 sudo poweroff
29 7 * * 2 sudo poweroff
29 7 * * 3 sudo poweroff
29 7 * * 4 sudo poweroff
29 7 * * 5 sudo poweroff
#
#MONTAG BIS FREITAG AUSSCHALTEN AM ABEND
59 19 * * 1 sudo poweroff
59 19 * * 2 sudo poweroff
59 19 * * 3 sudo poweroff
59 19 * * 4 sudo poweroff
59 19 * * 5 sudo poweroff
#
#SAMSTAG AUSSCHALTEN AM VORMITTAG UND ABEND
59 11 * * 6 sudo poweroff
59 19 * * 6 sudo poweroff
#
#SONNTAG AUSSCHALTEN AM VORMITTAG
59 11 * * 7 sudo poweroff
Magic Mirror Updates per Cronjob
Wie oben schon beschrieben, kann man jegliche Befehle per Cronjob ausführen lassen. Da lag es für mich auf der Hand, dass ich auch gleich noch einen Job einrichte, welches den Magic Mirror automatisch aktualisiert, damit ich nicht jedesmal die Updates manuell einspielen muss. Im Magic Mirror #6 habe ich beschrieben wie man dies manuell machen muss.
Jetzt habe ich mir dafür einen Cronjob eingerichtet, der folgendermassen konfiguriert ist:
#MAGIC MIRROR UPDATE GIT PULL
0 2 * * 7 sudo cd ~/MagicMirror && git pull
4 2 * * 7 sudo poweroff
Wiederum in meiner Sprache heisst dies:
Führe jeden Sonntag um 02:00 Uhr nachts folgenden Befehl aus cd ~/MagicMirror && git pull und fahre anschliessend um 02:05 Uhr den Raspberry wieder mit dem Befehel sudo poweroff runter.
Natürlich muss ich dazu dann auch noch den Zeitplan der smarten Steckdose aktualisieren, dann der Raspberry lässt sich natürlich nicht ohne Strom starten.
Nicht vergessen mit Ctrl+x anschliessend mit Yes den Cronjob Editor zu speichern.
Cronjob und Logfile
Da ich im nach hinein immer mal schauen möchte, ob die Updates ausgeführt oder allgemein ob der Cronjob richtig ausgeführt wurde, gibt es noch ein entsprechendes Logfile. Allerdings muss in einer Standard Raspberry OS-Installation dieses Logfile erst mal aktiviert werden.
Zuerst muss das rsyslog.conf File mit dem Nano-Editor geöffnet werden:
sudo nano /etc/rsyslog.conf
Anschliessend muss man im Bereich Rules die Zeile cron auskommentieren.
Das heisst die Zeile mit dem cron muss anschliessend so aussehen:
cron.* /var/log/cron.log
Sobald der erste Cronjob durchgelaufen ist, wird im Pfad /var/log das File cron.log angelegt:
Mit nano/cron.log lässt sich das File noch öffnen und analysieren. Kann einem vielleicht mal behilflich sein.
Fazit
Mittels Cronjob kann man den Raspberry zeitgesteuerte Befehle oder Kommandos ausführen. So zum Beispiel den Raspberry runterfahren oder den Magic Mirror automatisch aktualisieren.
Hallo,
du musst nicht für jeden Tag eine Zeile in die crontab schreiben. Es geht z.B. auch so
29 7 * * 1-5 sudo poweroff
oder auch so, falls die Tage nicht inReihe liegen:
59 19 * * 1,2,4,5 sudo poweroff
So geht das auch mit den anderen Werten. ganz kurz wäre also auch
29,59 7,19 * * 1-5 sudo poweroff
Allerdings würde der Pi damit auch um 19:29 heruntergefahren werden 😉
Viele Grüße
Sepp
Hallo Sepp
Besten Dank für deinen Input. Ich werde den Post in den nächsten Tagen aktualisieren.
Beste Grüsse
Michi
Hallo
Was mache ich falsch? Ich will, dass mein MagicMirror jeden Tag um 18:30 einen Restart macht.
Egal ob ich jetzt pm2 restart mm oder pm2 restart mm.sh im crontab -e eingebe, er will einfach nicht neu starten. Der Befehl geht sonst aber ohne Problem im Putty, wenn ich ihn direkt eingebe.
#MONTAG BIS SONNTAG UM 18:30 MAGICMIRROR RESTART
30 18 * * 1-7 pm2 restart mm.sh
#
#SAMSTAG REBOOT UM 12:00 MAGICMIRROR REBOOT
59 11 * * 6 sudo reboot
#
Der Befehlt; sudo reboot funktioniert.
Gruss
Hi Kevin
Was spricht den dagegen einfach den “sudo reboot” zu verwenden?
Gruss
Michi
Hallo Michi
Eigentlich nichts, aber gerne würde ich nicht immer den PI rebooten sondern nur den MagicMirror neu starten.
Gruss
Du müsstest sicher mal noch schauen, ob der Pfad so stimmt zu deinem restart mm.sh Skript stimmt. Das wird jetzt wohl noch nicht der Fall sein. Je nach dem wo dein mm.sh Script liegt.
Hallo Michi
Ich weiss langsam wirklich nicht mehr weiter. Jetzt habe ich den Befehl eingetragen:
#MONTAG BIS SONNTAG UM 17:27 MAGICMIRROR RESTART
27 17 * * * cd && pm2 restart mm
Wenn ich diesen Befehl im Terminal eingebe, macht der MM auch einen Restart, aber leider nicht mit dem crontab.
Was mache ich falsch?
Auch dieser Befehl geht super im Terminal, aber im crontab nicht:
cd /home/pi/MagicMirror && pm2 restart mm
Also ich bin jetzt ja kein Spezialist aber der Pfad in deinem Crontab stimmt so sicher nicht.
Das müsste eher so was in der Richtung sein: 27 17 * * * /absolute_path/zum_script/pm2 restart mm.sh
Hallo Michi
Ok, werde ich heute Abend versuchen. Danke
Hallo Michi,
ich bin mir nicht sicher was ich falsch mache, aber ich schätze mal meine Syntax ist falsch. Und zwar wollte ich lediglich, dass Crontab MagicMirror generell startet, also erstmal ohne eine bestimmte Uhrzeit.
* * * * * home/pi/MagicMirror/installers/pm2 restart mm.sh
Hi Erik
Also meiner Meinung nach, sollte es stimmt, wenn du einfach die Sterne anstelle einer Uhrzeit verwendest (* * * * *). Wo ich allerdings nicht sicher bin, ob der Syntax mit dem Pfad so korrekt ist.
Ich bin leider zu wenig Cron-Spezialist. Aber vielleicht funktioniert etwas in diese Richtung hier: pm2 restart mm.sh –cron “* * * * *”
Danke für die Antwort.
Ich hab jetzt noch ein wenig herumprobiert und es folgendermaßen hinbekommen:
* * * * * home/pi/MagicMirror/installers/mm.sh
Das Problem ist jetzt nur noch die hohe CPU-Lastung wodurch sehr viel Wärme entsteht und der Pi hängenbleibt und er den MagicMirror eben jede Minute versucht neuzustarten. Es ist also definitiv von Vorteil einen Zeitpunkt zu definieren.
Danke für dein Feedback.
Kurz noch eine Frage: Warum willst du den Magic Mirror so regelmässig neu starten?
Da der MagicMirror mein (unser) Projekt des Informatikunterrichtes ist und wir nach Abgabe von diesem nicht mehr da sind, hab ich einen Weg gesucht damit, falls jemals der Strom ausfallen sollte oder jegliche andere Störungen vorkommen, der MagicMirror nach erfolgreichem Rebooten wieder geöffnet wird. Im Endeffekt soll auch das Problem mit dem dauerhaften Stromverbrauch dadurch gelöst werden, weshalb ich wahrscheinlich zusätzlich den MagicMirror jeden Tag morgens hochfahren lasse und nachmittags wieder komplett herunter. Wir haben viele Möglichkeiten probiert, dass MagicMirror von alleine nach einem Reboot startet, aber keine hat so richtig funktioniert, außer eben jetzt diese.
Aber dann müsstest du ja nicht den Magic Mirror restarten sondern den ganzen Raspberry Pi runterfahren und zu einem bestimmten Zeitpunkt wieder starten. Nur so kannst du ja richtig Strom sparen, wenn der Raspberry und der Monitor nicht laufen. Dazu brauchst du dann aber eine Zeitschaltuhr, die den Raspberry wieder startet.