Endlosprogramm - Ausführung beenden lassen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
tlosert
User
Beiträge: 18
Registriert: Donnerstag 6. Mai 2021, 13:05

Sirius3 hat geschrieben: Donnerstag 20. Mai 2021, 10:20 Warum startest Du jetzt mit sudo? Wenn Du telebot lokal installiert hast, dann kennt das root nicht.
Das war nur ein Versuch, da ich mich noch nicht so gut auskenne. Klingt aber logisch die Erklärung.
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

tlosert hat geschrieben: Dienstag 18. Mai 2021, 09:03 Also ich habe einmal in der crontab "@reboot python3 /home/pi/telegram/bot.py" stehen.
So ein Linux-System hat eigens Möglichkeiten zum Management von Hintergrundprozessen (auch Daemons genannt), und ein aktuelles Raspbian nutzt dafür wie die meisten anderen Distributionen eine Software namens systemd. Dazu mußt Du nur ein sogenanntes Unitfile schreiben, es an die richtige Stelle (zum Beispiel /etc/systemd/system/) legen und es Deinem systemd-System einmalig (oder nach jeder Änderung Deines Unitfile) mit dem Kommandozeilenbefehl mit "systemctl daemon-reload" bekannt machen. Danach kannst Du die Ausführung Deines Programms mit "systemctl [Befehl] [Unitfilename]" steuern, wobei [Unitfilename] für den eindeutigen Namen Deines Unitfile steht und [Befehl] etwa "start", "stop", "enable" und "disable" sein kann. Was die ersten beiden tun, dürfte klar sein, die Befehle "enable" und "disable" werden benutzt, damit Dein Unitfile beim Booten automatisch gestartet wird ("enable") oder eben nicht ("disable"). Einen Einstieg findest Du hier: [1, 2]. Neben dem Vorteil der einheitlichen Verwaltung Deiner Hintergrundprogramme bindet systemd Dein Programm automatisch ins systemweite Logging ein; alles, was Dein Programm auf STDOUT und STDERR (Python: sys.stdout und sys.stderr) ausgibt, landet in den systemweiten Logdateien, inklusive Zeitstempel und allem drum und dran. systemd kann Dein Programm zusätzlich überwachen und es neu starten, wenn es abgestürzt ist oder (zum Beispiel vom OOM-Killer) beendet wurde.

Der zweite Punkt, den ich persönlich nicht so schön finde, ist, daß Dein Programm in Deinem Homeverzeichnis liegt. Zur Entwicklungszeit und auf einem privaten System ist das natürlich kein Problem, aber wenn Du damit in einen dauerhaften Betrieb gehen und vielleicht auch noch andere Systemadministratoren dabeihaben möchtest, ist es eleganter, Dein Programm dort zu installieren, wo selbstgestrickte Programme unter einem Linux nun einmal hingehören, nämlich in der Ordnerhierachie /usr/local/, in Deinem Fall also /usr/local/bin/.


[1] https://www.netways.de/blog/2017/10/13/ ... unitfiles/
[2] https://wiki.ubuntuusers.de/systemd/Units/
Antworten