Rasperi Pi Reboot / Shutdown über Python Script

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Hallo,

Kann ich über ein Python script, gezielt ein reboot oder auch ein shut down aus führen.
D.h. Über Python IDE ein Programm aufrufen um gezielt die Aktion durchzuführen. Ohne über eine Shell oder Batch zu verwenden.

VG
Steffen
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Was stört Dich daran `shutdown` über `subprocess.run` aufzurufen?
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ansonsten müsste das soweit ich mich erinnere auch über dbus irgendwie gehen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Ja grundsätzlich verwende ich ein IDE Thonny, wo ich meine Python Programme Aufrufe und in die Umgebung lade und mit Play ausführe. Jetzt dachte ich, das ich bequem über mein handy, wo ich eben der Zugriff auf raspery pi habe, z.b. Den Pi ausschalten könnte.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Ein gängiger Weg, einen RaspberryPi (oder jedes andere Linux System) von einem Smartphone aus auszuschalten, ist sich mit einer App wie ConnectBot per SSH zu verbinden und das so zu erledigen. Das Ausführen von Python über den Umweg einer IDE ist zwar möglich, aber ebenfalls nicht unbedingt die üblichste Variante. Falls du dabei bleiben möchtest, hat Sirius3 ja schon erklärt, wie das ginge. Wichtig ist hierbei noch, dass das Skript die notwendigen Berechtigungen braucht.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Ist zwar extrem OT hier, weil das mit Python nichts zu tun hat, aber ich verwende die App SSH Button, wenn ich mal wieder das Runterfahren des Test-RPi vergessen hatte: https://play.google.com/store/apps/deta ... tton&hl=de
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Dusty hat geschrieben: Samstag 25. März 2023, 18:03 Kann ich über ein Python script, gezielt ein reboot oder auch ein shut down aus führen.
Den Neustart würde ich ausschließlich via `systemctl` oder den symlink `reboot` machen.

Im Internet habe ich nur einen Weg gefunden, das direkt zu machen, wenn Sysinit-V oder systemd umgangen werden soll.
Dazu muss aber der sysreq-trigger aktiviert sein und das Programm muss mit Root-Rechten laufen, da es ansonsten keine Schreibberechtigung hat.

Hier der Shell-Code

Code: Alles auswählen

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system
Mit Python:

Code: Alles auswählen

import time


def shutdown():
    commands = ("s", "h")
    for cmd in commands:
        with open("/proc/sysrq-trigger", "w") as fd:
            fd.write(cmd)
        time.sleep(5) # keine Ahnung, ob der noch für den Sync Zeit zum Schreiben benötigt.
Da ich keine Lust auf einen Datenverlust habe, werde ich das nicht ausprobieren und rate jedem, das nicht zu tun.

Weitere Möglichkeiten, die funktionieren könnten:
  • dbus
  • systemd-remote
  • Signale an init/systemd-Prozess (PID 1) senden?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

DeaD_EyE hat geschrieben: Samstag 25. März 2023, 23:34 Im Internet habe ich nur einen Weg gefunden, das direkt zu machen, wenn Sysinit-V oder systemd umgangen werden soll.
Dazu muss aber der sysreq-trigger aktiviert sein und das Programm muss mit Root-Rechten laufen, da es ansonsten keine Schreibberechtigung hat.
Linux-Neulingen kann ich nur raten, die Existenz von SysRq besser erst einmal wieder zu vergessen. Das ist kein regulärer Weg, ein normales Linux-System auszuschalten und das sollte auch nicht durch die Erwähnung in einem Thread wie diesem suggeriert werden. In erster Linie ist das ein Feature für Debuggingzwecken bei der Kernelentwicklung sowie Not- und andere Sonderfälle, für Personen, die halbwegs wissen, was sie da tun. In bestimmten Fällen kann das schon mal hilfreich sein, z.B. wenn das System eingefroren ist. Das ist hier aber m.M.n. sicher nicht gegeben.
Zuletzt geändert von nezzcarth am Sonntag 26. März 2023, 00:59, insgesamt 3-mal geändert.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Pfff!! 😤
nezzcarth hat geschrieben: Sonntag 26. März 2023, 00:41 Linux-Neulingen kann ich nur raten, die Existenz von SysRq besser erst einmal wieder vergessen. Das ist kein regulärer Weg, ein normales Linux-System auszuschalten und das sollte auch nicht durch die Erwähnung in einem Thread wie diesem suggeriert werden.
Absolut Deiner Meinung! Für *normale* User reicht ein sudo poweroff oder sudo reboot völlig aus. Wenn man sein System unbedingt schrotten will, gibt es leichtere Wege als SysRq.🙄
Alles was wir sind ist Sand im Wind Hoschi.
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Ok, ok erstmal vielen Dank für die rege Diskussion und Vorschläge,
Hintergrund Info.
Ich habe im Garten am Pool eine Led Anzeige für Temperatur und uhrzeit gebastelt, wo eben vom Raspery gesteuert wird, der auch in dem LED Gehäuse sitzt. Über WLAN ist dieser im Homenetz angebunden.
Ich probiere mal euere Vorschläge aus.
VG
Steffen
Dusty
User
Beiträge: 35
Registriert: Sonntag 19. März 2023, 08:22

Warum ich eigentlich den reboot Befehl in Python Programm einbauen wollte, ist die Tatsache, das es manchmal zu einem Verbindungsproblem zwischen Logo (Poolsteuerung mit Temperatursensor) und Raspery Pi kommt, und die Temperaturdaten nicht zur Verfügung stehen. Dann hilft nur eine Neuverbindung des Raspery mit der Logo Steuerung. Deshalb mein Gedanke den Raspery Pi eben automatisch im pytonprogramm neu zu verbinden….
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

nezzcarth hat geschrieben: Sonntag 26. März 2023, 00:41 Linux-Neulingen kann ich nur raten, die Existenz von SysRq besser erst einmal wieder zu vergessen.
Ich habe es indirekt geschrieben:
Da ich keine Lust auf einen Datenverlust habe, werde ich das nicht ausprobieren und rate jedem, das nicht zu tun.
Das Gefährliche an der Art des Reboots ist, dass er sofort stattfindet, auch dann, wenn eine DB gerade irgendwas schreibt. Dienste werden nicht beendet. Das führt zu einem Datenverlust.

PS: Man kann doch einfach den Stecker mitten im Betrieb ziehen, ist genauso schlecht, ist aber einfacher :-D
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten