Geplante Aufgaben (Cron)

  • Hallo zusammen,

    für meine eigene Webstatistik experimentiere ich zum ersten Mal mit "Geplante Aufgaben" in PLESK. Ich habe zum Test ein Miniskript geschrieben:

    <?

    $now = date ("Y-m-d H:i:s");

    $log = fopen ("logs/log.txt", "a");

    fwrite ($log, "CRONSTATS: $now\r\n");

    fclose ($log);

    ?>

    Wenn ich dieses ganz normal im Browser aufrufe, tut es einfach, was es soll (in die Logdatei schreiben).


    Dann habe ich dieses Skript in PLESK unter "Geplante Aufgaben" als Aufgabentyp "PHP-Skript ausführen" eingehängt (siehe Bild). Probiere ich es mit "Jetzt ausführen" aus, so bekomme ich eine Rückmeldung "Die Aufgabe "httpdocs/crontest.php" wurde erfolgreich in 0 Sekunden abgeschlossen." Aber: in meiner Logdatei erfolgt kein Eintrag. Ebensowenig, wenn die Geplante Aufgabe zeitgesteuert ausgeführt wird.


    Dasselbe gilt für ein weiteres Testskript, indem ich etwas in meine Datenbank schreibe: Beim Browseraufruf tut das Skript, was es soll, beim Aufruf über Plesk nicht.


    Verstehe ich da jetzt irgendwas falsch?


    Danke für eure Unterstützung.

    Diethard

  • Hay,


    es könnte zum Beispiel daran liegen, dass man in cron nur absolute Pfade benutzen sollte. Im Script steht aber $log = fopen ("logs/log.txt", "a");, was aber eindeutig einen relativen Pfad hat. Such Dir den passenden absoluten Pfad und setze ihn da ein.


    Mach diese PHP-Datei in Dein log-Verzeichnis und rufe die PHP-Datei auf, dann hast Du den absoluten Pfad:


    PHP
    <?php
    $dir = dirname(__FILE__);
    echo "<p>Voller Pfad zu diesem Verzeichnis: " . $dir . "</p>";
    echo "<p>Voller Pfad zu einer .htpasswd Datei in diesem Verzichnis: " . $dir . "/.htpasswd" . "</p>";
    ?>

    BTW: Vermeide Short tags <?


    CU, Peter

    Peter Kleemann // https://www.pkleemann.de // +49 621 1806222-0 // Kann Programme, Internet, Netzwerke und Telefon.

  • Hallo Peter,

    danke für deinen superschnellen Tipp. Ich habe es sofort ausprobiert, der absolute Pfad ist dann /var/www/vhosts/xn--bcherboxx-sdpark-jzbk.de/httpdocs/logs/log.txt und sieheda - damit funktioniert es wunderbar. :) Vielen Dank. Was ich offenbar nicht verstanden hatte: Der Cronjob wird auf Serverebene ausgeführt, nicht auf Domainebene, daher braucht es den kompletten Pfad. Kapiert!


    Noch eine Frage, die du vielleicht auch aus dem Stegreif beantworten kannst: Führe ich das Skript unter PHP 5 aus, so bekomme ich als Zeitstempel date ("Y-m-d H:i:s") die Lokalzeit (MESZ). Dasselbe unter PHP 7: dann bekomme ich UTC, also z.B. 11:28 statt 13:28. Bug oder Feature??


    Danke und freundliche Grüße aus der Südpfalz

    Diethard

  • Hay,


    ob's Bug oder Feature ist, kann ich nicht sagen. Aber mit dem schönen Befehl (ab PHP 5.1) date_default_timezone_set('UTC'); bzw. andere Zeitzonen bekommst Du das normiert.


    CU, Peter

    Peter Kleemann // https://www.pkleemann.de // +49 621 1806222-0 // Kann Programme, Internet, Netzwerke und Telefon.

  • Das liegt sicherlich an einer anders konfigurierten php.ini. Dort sollte man eigentlich zumindest die Zeitzone setzen und mehr setzen.

    "Security is like an onion - the more you dig in the more you want to cry"