PHP Task sehen ob läuft

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    gibt es auf dem Raspberry die Möglichkeit zu sehen, ob ein bestimmtes PHP Script läuft?
    Es gibt den

    Code
    ps -ax

    Befehl, darin sehe ich aber nicht, ob ein PHP Script im Hintergrund läuft.

  • Nein, so ohne weiteres geht das nicht. Wie waere es, wenn du uns mal deine Aufgabe schilderst, vielleicht gibt's eine anderen Ansatz?

  • Ich glaube du kannst mit dem PS Befehl nur laufende Prozesse sehen. Das wäre in dem Fall dann "nur" PHP glaub ich. Also darüber bekommst du nicht den Skriptnamen. Wieso lässt du dein Skript nicht in ein logfile schreiben?

    Aequat omnes cinis. Impares nascimur, pares morimur! - Asche macht alle gleich! Ungleich werden wir geboren, gleich sterben wir! (Seneca)


  • Wie waere es, wenn du uns mal deine Aufgabe schilderst, vielleicht gibt's eine anderen Ansatz?


    Ich schildere gerne meine Aufgabe, muss aber dazusagen, dass es in diesem Forum bereits einen besseren Ansatz gab, dieser aber ziemlich kompliziert war und ich nicht weiter kam.

    Ich habe an meinem Garagentor 2 REED Kontakte, die den Status für Tor auf und Tor zu überwachen.
    Ich habe dazu in PHP eine dauerschleife mit sleep 30 und sollte sich der Zustand ändern (also von "Tor zu" auf "Tor auf") dann wird es in mySQL weggeschrieben. Über logfile sehe ich es dann.
    Mit Python würde es sicherlich besser und professioneller gehen, allerdings ist es nicht einfach, da ein Script zu schreiben, siehe:
    Crontab mit PHP
    Automatisch zusammengefügt:


    Wieso lässt du dein Skript nicht in ein logfile schreiben?


    Eine sehr gute Idee, warum bin ich nicht selbst draufgestoßen.
    Habe den Skipt ergänzt um Logfile und festgestellt, dass nach Neustart von Raspberry
    crontab die PHP gar nicht startet:

    @reboot /usr/bin/php /var/www/Garagentor3.php

    Wenn man den PHP Script dann einmal aufgerufen hat, dann läuft er in Dauerschleife.
    Nur warum, startet Crontab es nicht?

    Einmal editiert, zuletzt von AndyKL (21. Januar 2016 um 11:54)

  • Das Problem, was ich dir in dem anderen Thread auch schon beschrieben habe, ist das du mit PHP auch einen Zustand verpassen kannst. Wenn es einen Flankenwechsel vom GPIO gibt wird der nicht solange Bestand haben bis irgend ein Script diesen ausgelesen hat. Es wäre also besser und sinnvoller das ganze via Python und Interrupt zu lösen.

    Davon abgesehen kennen wir nicht dein (aktuelles) Script. Ohne das zu kennen kann man nur raten.

    Um aber trotzdem auf deine Frage hier einzugehen: Jeder Prozess erhält eine eindeutige Prozess-ID zugewiesen. Anhand dieser PID kann man Einfluss auf den Prozess ansich nehmen wie zB diesen killen.
    Mithilfe des Befehls "ps" zeigt man sich alle laufenden Prozesse an. Für den Befehl gibt es aber auch noch Parameter die man dem Befehl übergeben kann, so wäre zB "ax" sinnvoll. Näheres dazu kann man in der manual-page nachlesen: man ps
    Anhand des Dateinamens des Scripts kann man die Ausgabe des "ps" Befehls dann auch filtern sodass man nur sein gesuchtes Script angezeigt kriegt: ps ax | grep Script.php
    Nun muss man aber auch den grep Befehl ansich filtern da es sonst immer einen Treffer gäbe, also den Befehl erweitern: ps ax | grep -v grep | grep Script.php
    Man kann aber auch einen anderen Befehl nutzen: pidof Script.php

    Nur, was bringt dir diese Information? Was hast du damit nun vor? :s


  • Mithilfe des Befehls "ps" zeigt man sich alle laufenden Prozesse an. Für den Befehl gibt es aber auch noch Parameter die man dem Befehl übergeben kann, so wäre zB "ax" sinnvoll.

    Hallo,
    den Befehl ps -ax wende ich auch normalerweise an (siehe #1).
    Man sieht dort Pythonscripte, aber halt nicht PHP.

    Wenn mein Fehler gelöst wäre mit dem Cronjob, dann hätte ich einen Zustand mit dem ich leben könnte. Fakt ist, dass Crontab den Befehl nicht ausführt:

    @reboot /usr/bin/php /var/www/Garagentor3.php

    Ich gebe Dir ganz klar recht, dass Python die bessere Wahl ist.
    Hier ist noch mal der Script, der die REED Kontakte überprüf und mit Print ausgibt:


    Ich würde diesen Script gerne so weit verändern, sodass nur dann print erscheint, wenn sich der Status ändert z.B. von HIGH auf LOW, also einmalig.
    Sollte das funktionieren, wird das nächste sein, mit mySQL eine Verbindung aufzubauen. Dazu muss glaube ich etwas nachinstalliert werden.

  • Dieses Python Script behandelt die "poll" Methode, verursacht in dem jetzigen Zustand aber auch 100% CPU Auslastung da die while ungebremst rotiert. Das sleep ist also an der falschen Stelle.
    Ich sprach aber nicht von Polling sondern Interrupt.

    Wenn über "ps aux" kein "php" auftaucht dann läuft es auch nicht. Dabei muss man aber auch 2 Dinge unterscheiden:
    - Ein PHP Script was über Konsole ausgeführt wird.
    - Ein PHP Script was über einen Webserver bzw Webbrowser aufgerufen wird.

    Letzteres wird nicht über "ps aux" angezeigt da es kein eigenständiger Prozess ist.

    Ich versteh aber auch nicht wieso du hier noch einen Thread zum selben Thema auf machst - in dem anderen habe ich bereits versucht dir einige Grundlagen nahezulegen die du dann aber leider ignoriert hattest, wie zum Beispiel Beitrag#6

    Aus dem PHP Script Auszügen in Beitrag#3 (in dem anderen Thread) konnte man auch nicht wirklich schlau werden da die Hälfte fehlt aber du es auch nicht in CODE gepostet hast, so lässt es sich nur schwer verstehen/lesen.. Aber wie gesagt, nannte ich dir in Beitrag#4 einen Link den du dir durchlesen solltest - haste dann aber nicht beherzigt...

    Wenn du es in Python machen willst dann versuch es bitte auf die Weise wie ich in Beitrag#6 erwähnt hatte.
    Wenn du es in PHP machen willst dann beachte das was ich in Beitrag#4 verlinkt hatte.

    Wenn du dann Fragen hast zeig uns bitte deinen aktuellen Stand des eigenen Codes bzw der Versuche.

  • Ich habe das Thema Programmieren in Python nicht weiter verfolgt, weil es für mich ganz einfach zu schwer war. Ich habe eine Lösung in PHP, auch wenn sie evtl. leider viel Ressourcen braucht.
    Was ich jetzt nur noch brauche, ist das einmalige Starten der PHP beim Systemstart.

    Wo finde ich das Syslog, in dem ich gucken kann, ob Crontab gestartet wurde?

    #!/usr/bin/php habe ich an der Seite angehängt. Hier im Forum gab es bereits Diskussionen über Crontab und PHP, doch leider kam ich da nicht weiter.

  • Im Systemlog finde ich nur dieses:

    Jan 22 11:19:05 Raspberry /USR/SBIN/CRON[2100]: (root) CMD (/usr/bin/php /var/www/Garagentor3.php)
    Jan 22 11:19:05 Raspberry /USR/SBIN/CRON[2086]: (CRON) info (No MTA installed, discarding output)
    Jan 22 11:19:07 Raspberry /USR/SBIN/CRON[2083]: (CRON) info (No MTA installed, discarding output)

  • Das bedeutet, es gab beim Ausführen ein Problem oder eine Ausgabe, es ist aber kein MailTransportAgent eingestellt und somit weiß cron nicht was er mit der Ausgabe oder dem Fehler anfangen soll

    Was passiert denn wenn du den Befehl manuell in der Konsole ausführst?

    Code
    sudo /usr/bin/php /var/www/Garagentor3.php
  • Treffer: es geht nicht!
    Es kommt:

    Code
    PHP Notice:  Undefined variable: var in /var/www/Garagentor3.php on line 18

    Line 18:

    Code
    $logdatei=fopen("/var/www/Files/logfile_Garagentor3.txt","a");
    fputs($logdatei,
        date("d.m.Y, H:i:s",time()) .
    		#", " . $_SERVER['HTTP_USER_AGENT'] .
        ", " . $var ."\n"           ######Line 18
        );
    fclose($logdatei);	
    ################# ENDE: Logfile erstellen, um z.B. zu sehen, ob Seite läuft

    Es waren auch 2 andere Fehler da, die ich entfernt habe!

    Einmal editiert, zuletzt von AndyKL (22. Januar 2016 um 12:27)

  • Wenn es manuell nicht funktioniert kann es über crontaab auch nicht gehen ...

    Da wir bis dato dein aktuelles Script nicht zugesicht bekommen haben konnten wir dazu auch nichts sagen - also das nächste mal bitte selbstständig posten


    PS: file_put_contents
    PPS: Es gibt unten rechts einen "Bearbeiten" Knopf. Bitte nutzen.

  • Ich wollte niemanden verwirren mit dem Script, sorry


    Automatisch zusammengefügt:


    Wenn es manuell nicht funktioniert kann es über crontaab auch nicht gehen ...


    Manuel funktioniert es jetzt zu 100%, es gibt keine Fehlermeldung mehr.

    Doch als Cronjob will es nicht gehen.

    Einmal editiert, zuletzt von AndyKL (22. Januar 2016 um 13:18)

Jetzt mitmachen!

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