Beim Autostart wird das Skript ausgeführt, tut aber nicht was es soll

  • Hallo zusammen,

    um die Laufzeiten meines Ölbrenners zu loggen verwende ich das folgende Skript:

    Wenn ich es per Hand ausführe, läuft es wunderbar und tut was es soll. Ebenso wenn ich es mit "at now" zum werkeln in den Hintergrund schicke. Aber sobald ich das Skript per crontab oder rc.local beim Systemstart ausführen lasse, dann läuft es zwar im Hintergrund, wird also korrekt gestartet, tut aber nichts. Zumindest nichts sichtbares, wie z.B. die Laufzeiten in die DB zu schreiben, wofür es ja eigentlich da ist. Wo kann hier der Fehler liegen? :denker:

  • Beim Autostart wird das Skript ausgeführt, tut aber nicht was es soll? Schau mal ob du hier fündig wirst!

  • Hi,
    ich würde sagen, entweder ein Rechteproblem oder ein Problem mit der Interpreterauswahl.

    Welchen cronjob nutzt Du?

    /etc/crontab ?

    Die crontab wird als root gestartet. Ein Beispiel für einen Eintag ist:

    Code
    @hourly         root    /usr/bin/python /home/pi/ftp.py

    Der Interpreter wird hier gleich mit vorgegeben.
    Wichtig sind hier auch absolute Pfadangaben.
    Bei Problemen ist cron auch recht gesprächig. /var/log/syslog ist dann der Anlaufpunkt.

    Gruß Jan

  • Egal, ob ich den root-crontab oder den user-crontab verwende, das Ergebnis ist das Gleiche. Die absoluten Pfadangaben sind auch vorhanden. In meinem spätjugendlichen Leichtsinn würde ich ein Rechte- oder Pfadproblem fast ausschließen, das Skript wird ja jedes Mal korrekt gestartet und läuft auch aktiv im Hintergrund:
    pi@brennerraspi:~/Brenner$ ps aux | grep /home/pi/Brenner/brennerlauf_neu.py
    pi 2346 0.0 0.1 4276 1824 pts/0 S+ 21:22 0:00 grep --color=auto /home/pi/Brenner/brennerlauf_neu.py

    Ich vermute, dass das Skript per autostart - irgendwie und warum auch immer - keine Daten vom GPIO bekommt und deswegen im ersten if hängenbleibt, an dieser Stelle gibt es ja nix zu protokollieren und es würde sich sozusagen korrekt verhalten. Erst wenn es -ausgelöst durch die Statusänderung am GPIO - ins zweite if springt erfolgt ja das Schreiben in die DB. Kann das möglich sein und wenn ja, wie lässt sich das umgehen?

  • ....das Skript wird ja jedes Mal korrekt gestartet und läuft auch aktiv im Hintergrund:

    Code
    pi@brennerraspi:~/Brenner$ ps aux | grep /home/pi/Brenner/brennerlauf_neu.py
    pi        2346  0.0  0.1   4276  1824 pts/0    S+   21:22   0:00 grep --color=auto /home/pi/Brenner/brennerlauf_neu.py

    Ich habe gerade mal auf meinem PC -der kein Pi ist- geprüft, ob Dein Script bei mir läuft.... natürllich unberücksichtigt des kleinen Umstandes, dass ich das Script gar nicht habe.... aber das Ergebnis ist interessant... das gleiche, wie bei Dir:

    Code
    ps aux | grep /home/pi/Brenner/brennerlauf_neu.py
    root      3506  0.0  0.0  12748  2204 pts/0    S+   22:48   0:00 grep /home/pi/Brenner/brennerlauf_neu.py

    Fällt Dir was auf? :D Ich würde mal darauf tippen,dass es nicht läuft *fg*

    Einmal editiert, zuletzt von WinterUnit16246 (11. November 2016 um 22:53)

  • Hallo Tralala,

    sorry,


    pi@brennerraspi:~/Brenner$ ps aux | grep /home/pi/Brenner/brennerlauf_neu.py
    pi 2346 0.0 0.1 4276 1824 pts/0 S+ 21:22 0:00 grep --color=auto /home/pi/Brenner/brennerlauf_neu.py

    Dein Skript läuft definitiv nicht!

    Also wie immer bei den Cronjobs:
    - absolute Pfade verwenden
    - Shebang / Zugriffsrecht "Ausführbar" setzen
    - In den Log-Dateien schauen, was wer ausplaudert, um Dich der Fehlerursache anzunähern

    EDIT: TomasL war schneller!

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. November 2016 um 23:06)

  • Hallo ihr 2,
    woran erkennt man denn, dass es nicht läuft, obwohl der Prozess aufgelistet wird? Im Moment habe ich ihn per Hand gestartet und er läuft definitiv (macht ja Einträge in die DB) und die Ausgabe von
    pi@brennerraspi:~/Brenner$ ps aux | grep /home/pi/Brenner/brennerlauf_neu.py
    pi 2979 0.0 0.2 4456 1916 pts/0 S+ 23:11 0:00 grep --color=auto /home/pi/Brenner/brennerlauf_neu.py

    sieht genauso aus. Woran erkenne ich denn, ob er tatsächlich läuft(außer, dass etwas in der DB steht)? Wo ist da bei der Ausgabe von ps der Unterschied? Nichtsdestotrotz werde ich natürlich morgen trotzdem noch einmal alles genau überprüfen - Zugriffsrechte, Pfade... das wird ja wohl hinzubekommen sein :)

  • Hallo tralala,



    Hallo ihr 2,
    woran erkennt man denn, dass es nicht läuft, obwohl der Prozess aufgelistet wird?

    Gib' mal ein (ich gehe jetzt mal davon aus, dass keiner Deiner Prozesse ljihasmdhjgasdgfuztsdcuzbgtasd heißt ;) :(

    Code
    ps aux | grep ljihasmdhjgasdgfuztsdcuzbgtasd


    dann

    Code
    sleep 50 &

    und schließlich

    Code
    ps aux | grep sleep

    Bei mir steht dann auf dem Bildschirm

    Code
    ps aux | grep ljihasmdhjgasdgfuztsdcuzbgtasd
    andreas   6483  0.0  0.0  17460   944 pts/1    S+   23:31   0:00 grep --color=auto ljihasmdhjgasdgfuztsdcuzbgtasd
    sleep 50 &
    [1] 6487
    ps aux | grep sleep
    andreas   6487  0.0  0.0  12892   616 pts/1    S    23:32   0:00 sleep 50
    andreas   6492  0.0  0.0  17460   936 pts/1    S+   23:32   0:00 grep --color=auto sleep

    Welche Beurteilung bleibt da noch übrig?


    Nichtsdestotrotz werde ich natürlich morgen trotzdem noch einmal alles genau überprüfen - Zugriffsrechte, Pfade... das wird ja wohl hinzubekommen sein :)

    Klar! Das haben schon ganz andere hinbekommen. Irgendwie...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. November 2016 um 23:37)

  • Alles richtig :D , aber woran erkenne ich denn letztendlich, ob der Prozess tatsächlich läuft, oder ob mir ps nur suggeriert, er würde laufen? In beiden Fällen ist die Ausgabe von ps identisch :huh:

  • Na daran, das grep *NICHT* Teil der Kommandozeile ist. Was man zB machen kann:

    ps aux | grep prozessname | grep -v grep

    durch den letzten Teil werden Kommandozeilen, die grep enthalten, gefiltert.

  • Hallo tralala,

    schaue Dir doch die Ausgabe mal genau an!

    Einmal steht eine Zeile als Ausgabe - in der letzten Spalte -color blablabla. Wodurch der zu suchende Prozess angegeben wird.

    Bei anderen Beispiel werden zwei Zeilen ausgegeben. Der zu suchende Prozess ist rot geschrieben, in der zweiten Zeile steht wieder -color blablaba.

    Folgerung:
    Die Zeile mit -color ist einfach der Prozess, den Du anstößt, wenn Du

    Code
    ps aux | grep irgendsondummerprozess

    zur Ausführung freigibst.

    Oder gibt's für Dich eine andere schlüssige Erklärung?



    Alles richtig :D , aber woran erkenne ich denn letztendlich, ob der Prozess tatsächlich läuft, oder ob mir ps nur suggeriert, er würde laufen? In beiden Fällen ist die Ausgabe von ps identisch :huh:

    Ein zweiter Hinweis sind die in der 2. Spalte stehenden Prozess-IDs. Dein per Crontab angestoßener Prozess hat gegen über der Pipe [font="Courier New"]ps aux | grep[/font] die geringere Prozess-ID (weil vorher gestartet). Steht nur eine Prozess-ID, dann läuft Dein Cronjob nicht...

    Und: [font="Courier New"]ps[/font] suggeriert gar nichts .. Du interpretierst hier irgendetwas hinein, was nicht den Tatsachen entspricht. Etwas, was Du gern so hättest, was aber nicht so ist.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. November 2016 um 23:55)

  • Servus,
    hm ... ich würde mir da keinen abbrechen und das Kommando

    Code
    pi@pi-lcurr:~ $ sleep 50&
    [1] 1687
    pi@pi-lcurr:~ $ pidof sleep
    1687
    pi@pi-lcurr:~ $

    -> pidof nehmen <- ;)

    cu,
    -ds-

  • Hi Dreamshader,

    Dein Vorschlag versagt hier, weil hier ein Python-Skript gestartet werden soll. Deren Name wird nur über [font="Courier New"]ps aux[/font] sichtbar. Wenn Du hier alle Python-Prozesse ausspuckst, dann weißt Du nicht, ob der eine Cronjob auch dabei ist.

    Für compilierte C-Programme etc. funktioniert Dein Vorschlag natürlich idiotensicher!

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Servus Andreas,
    hast recht ... ich dachte, der pidof ist so schlau und würde auch mit z.B.:

    Code
    pidof python example.py


    klarkommen. Gerade mal ausprobiert: tut er leider nicht ... =(

    cu,
    -ds-

  • Ja ... das klappt mit Argument:

    Code
    pi@pi-lcurr:~ $ pgrep -laf simpletest
    1655 python simpletest.py
    pi@pi-lcurr:~ $


    perfekt Manul :thumbs1:

    ( und ich hab' wieder was dazugelernt ;) )
    cu,
    -ds-

  • Guten Morgen Dreamshader,


    Servus Andreas,
    hast recht ... ich dachte, der pidof ist so schlau und würde auch mit z.B.:

    Code
    pidof python example.py


    klarkommen. Gerade mal ausprobiert: tut er leider nicht ... =(

    Sag' mal,
    [very OT]
    Du hast doch jetzt nicht wirklich Python gestartet? Oder doch?
    [/very OT]

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Doch ... ich hab' das skript sogar etwas verändert, damit es länger läuft ...
    Das lag halt hier grad' so rum ... das war das skript, das mich seinerzeit auf die Spur der fehlerhaften Ansteuerung des ADS1115 in den Beispielen für das -> ESP-Erweiterungsboard von Neueinsteiger <- gebracht hat.
    Meine Raspi leben aber noch :lol:

    cu,
    -ds-

  • Wenn man sich sicher ist dass kein anderes python Script läuft, kann man durch aus 'pidof' verwenden dann eben nur 'pidof python' - völlig egal ob man das Script direkt dem Interpreter übergeben oder direkt ausgeführt hat (Shebang). Sofern man das Script mit python3 ausgeführt hat dann eben 'pidof python3'. Laufen mehrere Scripts werden halt mehrere PID's ausgegeben.

    Python
    #!/usr/bin/python3
    from time import sleep
    
    
    while True: sleep(1)

    (es läuft auch noch fail2ban)

  • So. Ich habe jetzt hier mal so Einiges probiert, fruchtet aber nicht. Folgende Einträge habe ich sowohl in der root-crontab, als auch in der user-crontab versucht:

    @reboot /usr/bin/python /home/pi/Brenner/brennerlauf_neu.py
    @reboot /home/pi/Brenner/brennerlauf_neu.py
    @reboot python /home/pi/Brenner/brennerlauf_neu.py
    Die Rechte des Skript stehen auf 755, ebenso wie die des Überordners. Ein anders Skript auf einem anderen raspi wird dem o.g. Eintrag in der crontab problemlos gestartet. Ich kann per Hand sowohl als User, als auch als root das Skript mit
    python /home/pi/Brenner/brennerlauf_neu.py
    sofort starten und es funktioniert. Nur eben nicht automatisch. Wo sitzt hier der Wurm drin?? :denker: =(

  • Hallo Meigrafd,

    gerade habe ich mal spaßeshalber

    Code
    pidof python

    eingegeben

    Das Ergebnis

    Code
    2775 2774 2681


    schockiert mich zutiefst, denn ich habe kein einziges Python-Programm wissentlich gestartet.

    Somit ist [font="Courier New"]pidof python[/font] vollkommen ungeeignet, einen Hinweis zu erhaschen, ob ein bestimmtes vorgegebenes Python-Skript läuft. Aber darauf hast Du ja feundlicherweise vorsorglich hingewiesen.

    Der TE sollte daher auf jeden Fall eine der zuvor vorgstellten Linux-Kommandos oder Pipes nutzen.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (12. November 2016 um 16:21)

Jetzt mitmachen!

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