Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Fragen zu Cronjob / Kontrolle / Rechtevergabe

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Fragen zu Cronjob / Kontrolle / Rechtevergabe

    Hallöchen.

    Ich habe gerade mal testweie einen Cronjob erstellt. Zunächst einmal der Quellcode...

    PHP-Code:
    #!/usr/bin/php

    <?php
    $ip 
    getenv("REMOTE_ADDR");
    $input "
    IP:
    $ip
    "
    ;

    $datei fopen("IP.txt","a+");
    fwrite($datei$input);
    fclose($datei);
    ?>
    Rufe ich das entsprechende Script über den Browser aus funktioniert es einwandfrei. Es wird eine "IP.txt" angelegt in der die Daten gespichert werden.
    Bei dem Cronjob bekomme ich allerdings folgende Meldung per E-Mail zugeschickt:

    Code:
    Warning: fopen(IP.txt): failed to open stream: Permission denied in /is/htdocs/serveradresse/www/cronjobs/test.php on line 9
    
    Warning: fwrite() expects parameter 1 to be resource, boolean given in /is/htdocs/serveradresse/www/cronjobs/test.php on line 10
    
    Warning: fclose() expects parameter 1 to be resource, boolean given in /is/htdocs/serveradresse/www/cronjobs/test.php on line 11
    Zum einen interessiert mich natürlich das Problem an sich bzw. wie ich es lösen könnte und zum anderen würde mich noch ein weiterer Punkt stark interessieren und zwar wie man Cronjobs kontrollieren kann.
    Eine direkte Ausgabe, wie bei einem "normalen Seitenaufruf" bekommt man ja nicht, wodurch die für mich gängigen Kontrollstrukturen z.B. über 'echo "";' garnichts bringen würden.

    Hab auch schon ne Weile gegoogled und muss vorweg nehmen, dass ich bei meinem Anbieter keinen Zugriff auf "/var/log/messages" habe...so wie ich das sehe (Host Europe).
    Und was die Rechte angebalngt habe ich bereits auf 770 gestellt...iwie stehe ich gerade vermutlich voll auf der langen Leitung.

  • #2
    Zitat von Gosu Beitrag anzeigen
    Eine direkte Ausgabe, wie bei einem "normalen Seitenaufruf" bekommt man ja nicht, wodurch die für mich gängigen Kontrollstrukturen z.B. über 'echo "";' garnichts bringen würden.
    Ausgaben werden dir, wie du schon bemerkt hast, per E-Mail zugesendet. Je nach Konfiguration landen Ausgaben/Fehler auch in /var/log/syslog oder /var/log/cron.log.

    Zitat von Gosu Beitrag anzeigen
    Hab auch schon ne Weile gegoogled und muss vorweg nehmen, dass ich bei meinem Anbieter keinen Zugriff auf "/var/log/messages" habe...so wie ich das sehe (Host Europe).
    Du darfst also Cronjobs angelegen aber nicht in die Logdateien sehen?


    Zitat von Gosu Beitrag anzeigen
    Bei dem Cronjob bekomme ich allerdings folgende Meldung per E-Mail zugeschickt:

    Code:
    Warning: fopen(IP.txt): failed to open stream: Permission denied in /is/htdocs/serveradresse/www/cronjobs/test.php on line 9
    PHP-Code:
    var_dump(getcwd()); 
    Dann wird dir das aktuelle Arbeitsverzeichnis, in dem du deine IP.txt erstellen möchtest (und keine Rechte dazu besitzt), per E-Mail zugesendet.


    Zitat von Gosu Beitrag anzeigen
    PHP-Code:
    $ip getenv("REMOTE_ADDR"); 
    Erzähl mal warum du die Umgebungsvariable REMOTE_ADDR in eine Datei speichern möchtest.

    Kommentar


    • #3
      du nutzt wohl apache mit php_mod, der läuft auf einem anderen user, als die php cli. Und deshalb hast du andere Rechte. Du musst nur dafür sorgen, dass der user unter dem dein php cli läuft die Rechte hat. Die Fehlermeldung ist eigenltich eindeutig.
      Fatal Error: Windows wird gestartet

      Wie administriert man ein Netzwerk: Beispiel

      Kommentar


      • #4
        Das mit der Ip ist irrelevant...ich habe einfach das erst beste Script genommen, um das mit dem Cronjob einfach mal zu testen. Und da ich ein Script hatte wo eine Textdatei angelegt wurde und auch die Variable mit einer IP vorkam habe ich das in kürzester Zeit halt eben fast komplett löschen können bis halt nur noch die für mich nötigen Werte übrig geblieben sind. Das erzeugen der Textdatei erschien mir halt gerade ebend als praktisch, da ich im FileZilla Client nur aktuallisieren musste um zu sehen, ob der Cronjob was gemacht hatte.
        Als ich gemerkt hab das nix geht musste ich dann doch in das E-Mail-Postfach schauen.

        Danke erstmal für den Tip werde es direkt mal versuchen.

        Kommentar


        • #5
          lass doch den job einfach unter www-data (oä) laufen.

          Kommentar


          • #6
            Ui...bin etwas überrascht!
            Fehlermeldung ist nun folgende...:

            Code:
            string(32) "/is/htdocs/serveradresse"
            
            Warning: fopen(IP.txt): failed to open stream: Permission denied in /is/htdocs/serveradresse/www/cronjobs/test.php on line 11
            
            Warning: fwrite() expects parameter 1 to be resource, boolean given in /is/htdocs/serveradresse/www/cronjobs/test.php on line 12
            
            Warning: fclose() expects parameter 1 to be resource, boolean given in /is/htdocs/serveradresse/www/cronjobs/test.php on line 13
            Unterm Strich dann mal die Lösung...:
            Ich bin davon ausgegangen das es sich bei einem Cronjob entweder genau so verhält, wie beim "include" oder aber, wenn nicht, dann ebend wie beim normalen verlinken.

            Punkt 1: Korrekte verlinkung ist...(damit die IP.txt auch im selben Ordner landet)
            $datei = fopen("./www/cronjobs/IP.txt", "a+");
            Generell wurde mir vom Support empfolen absolute Verlinkungen zu nutzen!

            Punkt 2:
            PHP Warning: fopen(http://www.example.com/) [function.fopen]: failed to open stream
            Hier wurde versucht, eine entfernte URL über fopen() zu öffnen, ohne dass zuvor die Einstellung PHP-allow_url_fopen aktiviert wurde.

            Da hätte ich auch noch 1000 mal schauen können wegen der Ordnerrechte auf 777 und so.

            Beonderen Dank an Blar wegen dem Tip mit dem...
            var_dump(getcwd());
            ....

            War mir sehr hilfreich!

            edit @ moma: Das kenne ich nicht. Wäre zwar kein Grund, aber es ging mir eher darum das Problem zu löen als einen einfachen Ausweg zu finden. Es war wie weiter oben schon geschrieben nur zu Testzwecken. Wollte einfach mal einen Cronjob erstellen. Nun bin ich n bischen schlauer...
            Hat mich zwar Nerven gekostet, aber froh bin ich trotzdem es so gelöst zu haben...auch wenn da Hilfestellung dringend nötig war!!! Danke nochmals

            Kommentar


            • #7
              Generell wurde mir vom Support empfolen absolute Verlinkungen zu nutzen!
              Das Zauberwort ist bei so was meist __DIR__. Das liefert dir den absoluten Pfad zum Verzeichnis der Datei, in der das jeweilige __DIR__ steht.

              Das macht den Code unabhängig von Include-Pfad, Working-Directories und so Scherzen, was das ist, was man will, wenn man eine Anforderung hat wie: „Erstelle eine Datei in dem Verzeichnis, in dem auch die Scriptdatei liegt.“

              - http://php.net/manual/en/language.co...predefined.php

              Heißt, das hier sollte es tun:

              PHP-Code:
              $datei fopen(__DIR__ "/IP.txt""a+"); 
              Der Pfad, der an die fopen-Funktion übergeben wird (also das Ergebnis von __DIR__ . "/IP.txt"), ist dann auch absolut. So behältst du volle Flexibilität und musst den Pfad nicht ganz oder teilweise hardcoden. (Und der Hinweis, bei Dateisystemoperationen immer nur absolute Pfade zu verwenden, ist goldrichtig.)

              Ich habe vor einiger Zeit mal versucht, das genauer aufzuschreiben (allerdings mit Fokus auf Includes, weil es da ähnliche Probleme gibt, wenn „CLI-PHP“ von einem anderen Arbeitsverzeichnis ausgeht als „Webserver-PHP“):

              - http://www.ermshaus.org/2012/09/php-...emals-ohne-dir

              Kommentar

              Lädt...
              X