Python Script überwachen auf dem Raspberry

  • Hey,
    ich hab gerade ein Problem.
    Ich hab eine Python script was auf meinem PC sehr gut und stabil läuft, aber ich will mein PC nicht 24/7 anlassen.
    Also hab ich meinen Raspberry aufgesetzt, die neuste Python version installiert (nicht ganz die neuste, 3.4 auf dem PC 3.6 aber ich hoffe das macht kein problem) und hab alle module gedownloaded.
    Jetzt hab ich das Problem das ich irgendwie diese Datei auf meinen Raspberry Pi kriegen muss (500+ lines) und ich will auch noch den Output (print) davon überwachen und angucken, am besten Realtime aber Verzögerungen sind auch OK.

    Wie kann ich das am besten machen?

  • FAQ => Nützliche Links / Linksammlung => Dateien auf den PI hochladen

    Und um die prints zu sehen kannste doch einfach SSH nutzen?


    BTW: Wenn dein Script Python 3.6 nutzt, könnte es ggf sein dass es Funktionalitäten verwendet die es erst seit 3.5 gibt... Dann würde es mit 3.4 natürlich nicht so funktionieren wie zuvor. Also ab 3.5 kamen einige Sachen hinzu.....

  • Hallo,

    wenn du STDOUT sehen willst (also das, wohin `print` normalerweise schreibt), dann musst du halt einen Monitor anschließen. Oder, wenn der Raspi headless ist, dich per SSH verbinden.

    Da du aber wahrscheinlich nicht 24/7 die Ausgabe beobachten willst, macht es vielleicht mehr Sinn, die Ausgaben in eine Log-Datei zu schreiben. Python hat dafür das `logging` Modul an Bord. Die Logdatei kannst du bei Interesse mittels `tail -f name_der_logdatei.log` auch quasi live verfolgen, wenn du dich per SSH auf dem Raspi einloggst.

    Gruß, noisefloor

  • Zitat von "noisefloor" pid='293971' dateline='1501825807'


    Hallo,

    wenn du STDOUT sehen willst (also das, wohin `print` normalerweise schreibt), dann musst du halt einen Monitor anschließen. Oder, wenn der Raspi headless ist, dich per SSH verbinden.

    Da du aber wahrscheinlich nicht 24/7 die Ausgabe beobachten willst, macht es vielleicht mehr Sinn, die Ausgaben in eine Log-Datei zu schreiben. Python hat dafür das `logging` Modul an Bord. Die Logdatei kannst du bei Interesse mittels `tail -f name_der_logdatei.log` auch quasi live verfolgen, wenn du dich per SSH auf dem Raspi einloggst.

    Gruß, noisefloor

    OK hab jetzt auch alles mit dem Logging herausgefunden.
    Kleiner Tipp an alle Mitleser: Downloads auf den py sind nicht so schwer wie in dem Link oben, einfach in Dropbox die Datei hochladen, Link kopieren, &dl=1 dranfügen, wget deinlink und ihr habt eure Datei auf eurem Pi :)
    Hab es jetzt auch erfolgreich starten können und funktioniert alles.
    Nur will ich jetzt foreverjs (npm install forever, Module womit man Dateien für immer, bis zum restart, laufen lassen kann) installieren, und ich hab gehört das dass wenn ich meine SSH Session beende er auch automatisch mein Prozess dann beendet

    Einmal editiert, zuletzt von TheOverclocker (4. August 2017 um 11:39)

  • Schreib alle relevanten Ausgaben in ein Logfile, damit du später nach sehen kannst, und bau in dein Script was ein, was eine LED blinken lässt, wenn bestimmte Aktivitäten ausgeführt werden, dann siehst du immer, ob dein Script noch läuft. Eine zweite LED, die eingeschaltet wird, wenn bestimmte Fehlerzustände oder sowas erreicht sind, damit du eingreifen kannst. Du kannst dich auch per Mail oder SMS informieren lassen, wenn was nicht stimmt...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Er hat dir doch bereits das Module genannt worüber das Loggen abgewickelt wird: logging
    Was ist dabei unklar?

    Wie genau möchtest du das haben?
    Es gibt zich tausende Möglichkeiten. Sollen wir dir hier alle erklären?

  • Zitat von "meigrafd" pid='293990' dateline='1501838822'


    Er hat dir doch bereits das Module genannt worüber das Loggen abgewickelt wird: logging
    Was ist dabei unklar?

    Wie genau möchtest du das haben?
    Es gibt zich tausende Möglichkeiten. Sollen wir dir hier alle erklären?

    hab gerade editiert, sorry
    meigrafd ne sieht man nich aber > output.txt funktioniert super

  • Damit leitest du aber nur die normalen Ausgaben um, keine Fehlermeldungen.
    Desweiteren steigt die Dateigröße dann ins unendliche und sprengt irgendwann deine SD Karte - ganz zu schweigen von den ständigen Schreibzugriffen je nachdem wo du die Datei anlegst, die SD verkraftet aber nicht unendlich viele Schreibzugriffe..


    PS: Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.

  • Hallo,

    Zitat von "TheOverclocker" pid='293985' dateline='1501838185'

    Kleiner Tipp an alle Mitleser: Downloads auf den py sind nicht so schwer wie in dem Link oben, einfach in Dropbox die Datei hochladen, Link kopieren, &dl=1 dranfügen, wget deinlink und ihr habt eure Datei auf eurem Pi :)

    Was ist denn daran einfacher als in dem Link gennante Methoden? Man benötigt einen Account und meine Daten würd ich jetzt wirklich nicht Dropbox geben.
    Welchen Weg ich meist nutze ist, was im Link nicht erwähnt ist, ist FileZilla. Mit dem Programm lässt sich auch SFTP nutzen.
    Oder aber du kopierst einfach dein Skript und fügst es via Terminal im Editor wieder ein.

    Aber nicht Dropbox ;)

    Zitat von "TheOverclocker" pid='293992' dateline='1501839634'


    meigrafd ne sieht man nich aber > output.txt funktioniert super

    Ist das Absicht das du mit jedem Neustart des Skriptes auch deine output.txt überschreibst?
    Außerdem kann ich dir wirklich nur das Logging Modul von Python ans Herz legen, damit kannst du viel Differenzierter Ausgaben tätigen als mit print() (z.B kannst du unterscheidungen treffen zwischen, Debugmeldung, Info, Error etc.) Später kannst du dann die Datei welche von Logging erstellt worden ist gezielt noch den bestimmten Typen von Meldungen durchsuchen und anzeigen lassen.

    Außerdem, das wichtigste ist doch wohl, Fehlermeldungen mitzukriegen oder?


    Zitat von "TheOverclocker" pid='293985' dateline='1501838185'


    Nur will ich jetzt foreverjs (npm install forever, Module womit man Dateien für immer, bis zum restart, laufen lassen kann) installieren, und ich hab gehört das dass wenn ich meine SSH Session beende er auch automatisch mein Prozess dann beendet

    Ja wenn das Terminalfenster geschlossen wird, werden alle Prozesse welche darüber gestartet worden sind auch beendet.
    Jedoch gibt es auch hierfür mehrere Möglichkeiten, dass dies nicht passiert.
    Gänge Methoden um dies zu vermeiden ist die Verwendung von, nohup, screenoder den Prozess im Hintergrundzu starten (mittels "&" am Ende) die Prozessnummer zu merken und anschließend den Befehl auszuführen.

    Code
    disown -h "Prozessnummer"
  • Hallo,

    wenn du an die Umleitung noch `2>&1` angehängst, wird auch STDERR umgeleitet. Das kann man testweise machen, aber auf Dauer ist "richtiges" Logging besser, idealerweise inkl. Logrotation. Was das `logging` Modul von Python übrigens unterstützt.

    Zitat

    Nur will ich jetzt foreverjs (npm install forever, Module womit man Dateien für immer, bis zum restart, laufen lassen kann)


    Gibt es einen bestimmten Grund dafür? Das kannst du auch mit Bordmittel mit Hilfe einer systemd Service Unit erreichen. Inkl. automatischen Start beim Starten des Rechners und automatischem Neustart, falls das Skript zwischendurch abstürzt.

    Gruß, noisefloor

  • Zitat von "noisefloor" pid='293997' dateline='1501841778'


    Hallo,

    wenn du an die Umleitung noch `2>&1` angehängst, wird auch STDERR umgeleitet. Das kann man testweise machen, aber auf Dauer ist "richtiges" Logging besser, idealerweise inkl. Logrotation. Was das `logging` Modul von Python übrigens unterstützt.


    Gibt es einen bestimmten Grund dafür? Das kannst du auch mit Bordmittel mit Hilfe einer systemd Service Unit erreichen. Inkl. automatischen Start beim Starten des Rechners und automatischem Neustart, falls das Skript zwischendurch abstürzt.

    Gruß, noisefloor

    Nein es gibt keinen bestimmten Grund dafür.
    Kannst du mir helfen einen systemd für 2 Dateien aufzusetzen?
    Ich hab dieses Tutorial befolgt (https://www.thomaschristlieb.de/ein-python-scr…t-garnicht-weh/)
    aber mein status ist jetzt:


    Hier ist meine .service Datei


    Das hier ist der genaue Fehler


    Kannst du mir vielleicht helfen?

  • Zitat von "meigrafd" pid='294004' dateline='1501844547'


    Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.


    WorkingDirectory=\home\pi\sh2bot
    ExecStart=\home\pi\sh2bot\ -\ Kopie.py

    ähm? Du bist auf Linux, nicht Windows!

    \ = / ?

  • Hallo,

    ist das mit dem `syslog.target`und die ganzen anderen Direktiven bzgl. syslog Absicht oder kommt das daher, dass du die Service Unit von wo anders übernommen hast?

    Die Unit als unpriviligierter Nutzer auszuführen ist zwar ok, aber brauchst du tatsächlich auch einen eigene Gruppe dafür?

    Gruß, noisefloor

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!