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
Rasperi Pi Reboot / Shutdown über Python Script
- __blackjack__
- User
- Beiträge: 13117
- 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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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.
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.
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.
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
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
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.
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
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.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.
Zuletzt geändert von nezzcarth am Sonntag 26. März 2023, 00:59, insgesamt 3-mal geändert.
Pfff!! ![😤](//cdn.jsdelivr.net/gh/twitter/twemoji@latest/assets/svg/1f624.svg)
![🙄](//cdn.jsdelivr.net/gh/twitter/twemoji@latest/assets/svg/1f644.svg)
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.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.
Alles was wir sind ist Sand im Wind Hoschi.
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
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
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….
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Ich habe es indirekt geschrieben:
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.Da ich keine Lust auf einen Datenverlust habe, werde ich das nicht ausprobieren und rate jedem, das nicht zu tun.
PS: Man kann doch einfach den Stecker mitten im Betrieb ziehen, ist genauso schlecht, ist aber einfacher
![Very Happy :-D](./images/smilies/icon_biggrin.gif)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server