Warum ist die crontab nicht ausgeführt mein PHP-Skript?
Ich gebaut habe, eine php-Datei zu überprüfen, einige Ergebnis, so dass ich brauche, um das setup ein cronjob.
Habe ich ein alle 30 Minuten, so dass die Ergebnisse gesendet werden. Allerdings, ich weiß nicht, warum mein crontab nicht ausgeführt, nachdem alle 30 Minuten.
Hier ist, wie ich die crontab:
*/30 * * * * php /var/www/html/result.php
Ich habe bestätigt meine Datei-Verzeichnis korrekt ist. Was ich sicher nicht über das timing: ist es nicht möglich */30 * * * *
oder 30 * * * *
? Ich */30 * * * *
und hat nicht funktioniert.
*/30 * * * *
ausführen wird, alle 30 Minuten, in der Erwägung, dass30 * * * *
ausführen in der 30. minute, jede Stunde. Hier ist ein [link hilfreich]('cyberciti.biz/faq/...), können Sie einfach google für weitere.- Versuchen Sie auch, läuft
php -f /var/www/html/result.php
direkt von der Kommandozeile aus und sehen, welche Art der Ausgabe, die Sie erhalten, wenn Ihr die Ausgabe zeigt einen schwerwiegenden Fehler, hat das Problem wahrscheinlich mit Ihrem PHP-Skript.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben
Gibt es mehrere Möglichkeiten, warum es nicht funktioniert:
Zunächst ist es wichtig zu prüfen, ob die einfache Ausführung
php /var/www/html/result.php
. Ist dies erforderlich. Aber leider erfüllen dies bedeutet nicht, dass das problem gelöst ist.Den Pfad der
php
Binärdatei Hinzugefügt werden.geändert werden
oder was auch immer aus
which php
.Überprüfen Sie die Berechtigung des scripts um die Benutzer, die crontab.
Geben, die Ausführung Berechtigungen für die Datei:
chmod +x file
. Und stellen Sie sicher, dass die crontab gestartet wird, dass der Benutzer Rechte zum ausführen des Skriptes. Auch überprüfen, ob der Benutzer Zugriff auf das Verzeichnis, in dem sich die Datei befindet.Sicherer zu sein, Sie können auch fügen Sie den php-Pfad oben im script, wie:
Stellen Sie sicher, dass der Benutzer die Rechte auf die crontab. Prüfen Sie, ob er in der
/etc/cron.d/deny
- Datei. Auch, stellen Sie einen einfachen test, um zu sehen, wenn es ein crontanb-oder php-problem.Die Ausgabe des Skripts in eine log-Datei, wie William Niu vorgeschlagen.
Verwenden Sie die
-f
option, um das Skript auszuführen:Zusammenfassend, gibt es viele mögliche Gründe. Einer von Ihnen sollte das problem lösen.
Kann es sein, da php nicht im Pfad.
crontab
hat eine sehr geringepath
. Also, schließen Sie den vollständigen Pfad zu Ihrem php-Programm.können Sie testen Sie Ihre cron-Befehle durch umleiten der Ausgabe in eine Datei, z.B.
Vom diese Referenz Seite, unter "Crontab-Umgebung":
Auch
/30
syntax möglicherweise nicht unterstützt werden alle Plattformen, so, versuchen, es zu ändern, um0,30
statt.Hatte ein ähnliches Problem; von der Befehl-Linie, es hat funktioniert, aber von der cron, no go.
hatte ein "include ("./connect.php"); in meinem php-code für die db-Sachen.
Entfernt, und fügte hinzu, die connect.php code direkt in das php-Skript, und es funktionierte von cron.
Ich hatte ein ähnliches Problem auf
Ubuntu 14.04.1
und das problem stellte sich heraus, dass die Art und Weise war ich das ändern der crontab:War ich mit
sudo crontab -e
statt nurcrontab -e
und dies verursacht meine änderungen ignoriert werden.sudo
. Wenn überhaupt, dannsudo
sollte einer der Benutzer, der das tun kann, was es will.Hatte ich eine lustige ein, in Bezug auf diese. Obwohl meine Skripte manuell ausführen würden, würden Sie nicht ausführen von crontab.
Stellt sich heraus, dass, weil das Skript wurde ausgeführt von
/usr/bin/php
eher, dass der Speicherort der Datei (wie es funktioniert, wenn ich es manuell ausführen) meine php -require
war nicht zu finden, die Dateien, die ich wollte. Zu ändern, dass entsprechend die volle Adresse, Festnetz.Problembehandlung durch ausführen des Skripts als
/usr/bin/php -f /var/www/myfile.php
half mir das ProblemNach einem Tag rätselhaft, warum mein Skript funktionieren würde direkt (zum senden von Daten in einer E-Mail an einen gmail-account), habe ich entdeckt, dass alle bewusste sendet geklappt, wenn ich angeklickt, die url und alle cron sendet gingen in spam aus. Keine Ahnung warum, aber ich dachte, ich würde teilen.
Willem Antwort zeigte mir den Weg. In meinem Fall habe ich "include("connection.php")" in meinem code. Ich geändert connection.php zu /my/full/path/connection.php. Ich habe einige rename () - Aufrufe mit dem relativen Pfad, und änderte ich den absoluten Pfad. Das funktionierte für mich. Ich hoffe, es kann jemand anderes helfen.
Einfache und logische Art und Weise:
Überprüfung der cron-logs unter /var/log/cron geben Sie sehr nützliche Informationen
ZB.,
Mein cron-Eintrag ist
* * * * * /usr/bin/php /cat.php
<== Ausführen cat.php jede minuteDie log-Datei enthält einen Eintrag ähnlich der folgenden, jedes mal ein cron-Eintrag ausgeführt
Hier der php-Befehl jede minute ausgeführt und es wird ein Eintrag in die log-Datei jede minute
Wenn der Eintrag nicht da ist dann crond ist nicht auch die Auswahl, die cronjob. Wenn der log-Eintrag ist da und noch sind Sie nicht immer die gewünschte Leistung, dann gibt es etwas falsch mit dem Befehl/Anwendung Logik
Sind Sie sicher, dass es nicht läuft? Wenn Sie exec, erkennen, dass Sie läuft von cron, und den vollständigen Pfad für alles, was ist erforderlich, damit anstelle von
cp
, benötigen Sie/bin/cp
.