2010-10-08 16 views
6

Ich habe mehrere PHP-Dateien von Cron ausgeführt werden. Ich habe die crons up command-Cron läuft aber Funktionalität funktioniert nicht

crontab crontab.txt 

Innerhalb der crontab.txt-Datei, habe ich geschrieben Cron-Befehle wie folgt aus: -

#(Updating tutor activities) - every minute 
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php 

Aber keine der Funktionen arbeiten (Datenbankabfragen, das Senden Erinnerungsmails etc.). Das manuelle Ausführen der URLs funktioniert.

Dann habe ich meine Mail-Adresse in MAILTO und erhielt die E-Mails. In der Mail habe ich die gesamte HTML-Quelle der Seite erhalten. Was wird in der Post erwartet? Warum funktionieren meine Funktionen nicht?

Updates
Wenn ich

meine Cron-Befehle ändern
#(Updating tutor activities) - every minute 
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

Immer noch kein Erfolg, und dies kommt in der Post -

--15:03:01-- http://project/cron/tutor_activities.php 
      => `tutor_activities.php' 
Resolving project... IP Address 
Connecting to test.project|IP Address|:80... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently 
Location: http://project./ [following] 
--15:03:01-- http://project./ 
      => `index.html.1' 
Resolving project.... IP Address 
Connecting to project.|IP Address|:80... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: http://project/home/ [following] 
--15:03:01-- http://project/home/ 
      => `index.html.1' 
Resolving project... IP Address 
Connecting to wproject|IP Address|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/html] 
index.html.1 has sprung into existence. 
Retrying. 

Und viele index.html.1, index.html.2 Dateien häufen sich in die Wurzel meines Projekts. Ich möchte nicht, dass diese Dateien erstellt werden. Ich möchte nur, dass die Dateien ausgeführt werden.

gleichen Ergebnisse, wenn ich einen der beiden Befehle -

* * * * * /usr/bin/wget http://project/cron/tutor_activities.php 

    * * * * * wget http://project/cron/tutor_activities.php 

läuft php Befehl mit MAILTO Satz sendet mir diesen Fehler/bin/sh: php: Befehl nicht gefunden.

* * * * * php /path/to/test.php 

Also, ich bin nicht in der Lage php Befehl zu verwenden.

Ich habe eine einfache mailto() in meine test.php geschrieben. Die E-Mail kommt nicht, wenn Cron durchlaufen wird (unter Verwendung von wget und php schlägt fehl), aber die URL manuell ausgeführt wird funktioniert.

Mein Problem
Um es noch einmal deutlich zu machen, mein Hauptproblem ist, dass die Funktionalität in den Cron-Dateien nicht ausgeführt wird. Die Erstellung von Dateien ist ein sekundäres Problem.

Jede Hilfe würde geschätzt

Danke,
Sandeepan

+0

Sie müssen nicht auf Ihrem Web-System angemeldet sein, um diese Abfragen auszuführen, E-Mails zu senden usw., oder? –

+0

Ich habe die Lösung selbst gefunden. Ich akzeptiere, dass Details meiner Frage nicht ausreichend genug waren, um den tatsächlichen Grund zu erraten. Aber das war das Problem. Aber danke Ihnen allen für Ihre Bemühungen. Ich biete niemandem manuell Kopfgeld an. Lassen Sie die Stimmen über das Kopfgeld entscheiden. –

Antwort

1

Ich habe das Problem selbst gefunden. Ich habe nicht dieselbe URL in meine Crontab-Datei geschrieben, die ich manuell ausgeführt habe, und das war mein Fehler.

Während ich manuell lief, gab ich gerade Test in die URL ein, die Liste der gespeicherten URLs meines Browsers erschien und ich wählte die URL http://www.test.project.com/cron/tutor_activities.php, aber in der Crontab-Datei hatte ich http://test.project.com/cron/tutor_activities.php gesetzt. Ich war fälschlicherweise davon aus, das http://www.test.project.com/cron/tutor_activities.php laufen würde (weil wir eine Rewrite-Regel www vorhanden hinzufügen müssen)

Aber die Rewrite-Regel, es zu http://www.test.project.com/home wurde umgeleitet wird. Deshalb der HTML-Inhalt in den Mails.

Also, das Wichtigste, was Sie hier lernen müssen, ist sicherzustellen, dass wir die winzigen Dinge nicht verpassen und nicht davon ausgehen, dass wir alles richtig gemacht haben. In meinem Fall ist es besser, die Arbeits-URL in die Cron-Datei zu kopieren und einzufügen.

7

, wenn Sie eine URL als cronjob nennen wollen, werden Sie somthing verwenden wie wget haben. wenn es ein PHP-Skript auf Ihrem Server ist wäre es einfacher, php /...pathtomyscript.../cron/tutor_activities.php

+0

@oezi, danke für die Antwort, ich benutze bereits wget und der '-O - -q -t 'Teil in meinem wget ist für das Ausgeben von Dateien so weit ich mich erinnere. Bitte überprüfe mein Update. Wenn ich das '-O - -q -t' lösche, erstellt jeder Cron-Lauf eine Datei. Ich will das nicht. –

+0

könnte man versuchen "wget ​​mururl>/dev/null" zu machen (oder so etwas, kenne die genaue Syntax nicht), das würde ein "normales" wget ohne optionale Parameter machen und den autput nach/dev/"speichern" null – oezi

+0

@oezi running '* * * * php/pfad/zu/test.php' mit' MAILTO' set schickt mir diesen fehler '/ bin/sh: php: command not found'. Ich habe eine einfache 'mail()' in meine test.php geschrieben. Die E-Mail kommt nicht, wenn sie durch cron ausgeführt wird (sowohl wget als auch php), aber das Ausführen der URL funktioniert manuell. –

1

zu verwenden, wenn Sie wget mit -O nennen -, wird es die heruntergeladenen Inhalte zu stdout senden, die cron über die E-Mail-Nachricht an Dich senden . Im ersten Fall macht es genau das, was es sollte.

Wenn Sie wget ohne den Parameter -O aufrufen, wird versucht, den heruntergeladenen Inhalt als Datei mit demselben Namen wie die heruntergeladene Webseite zu speichern. Wenn es existiert, fügt es dem Namen den Inkrementierer hinzu, wie Sie gesehen haben. In diesem zweiten Fall macht es genau das, was es sollte.

Es ist nicht klar aus Ihrer Frage, wohin die Ausgabe gehen soll, aber wenn Sie die Ausgabe jedes Mal in der gleichen Datei speichern möchten, verwenden Sie -O myfilename.html.

+0

Ich möchte nicht, dass diese Dateien erstellt werden. Ich möchte nur die Dateien ausführen und die Ergebnisse produzieren. Aber da die Ergebnisse nicht kommen (Datenbankänderungen, Mails gehen nicht). –

+0

OK, so viel von Ihrer Frage war über die Ausgabe von wget es war nicht klar, dass Sie sich nicht einmal darum kümmern. Ich würde definitiv fortfahren, indem ich einige serverseitige Logging-Debugging zu tutor_activities.php hinzufügen. Wenn es überhaupt angerufen wird, sollte es egal sein, wie es von wget aufgerufen wird. –

1

Wenn Ihre laufenden PHP von cron/Befehlszeile stellen Sie sicher, den vollständigen Pfad

1

Es ist durchaus möglich, auf die ausführbaren PHP-Datei setzen, dass PHP ist nicht auf dem Weg in der Cron-Umgebung - es wird auf jeden Fall nicht das gleiche hat Setup als Ihre normale Shell. Versuchen Sie es mit den absoluten Pfad, um sowohl die PHP-Interpreter und der PHP-Skript in dem Befehl cron:

* * * * * /path/to/php /path/to/test.php 

Wie für die Erstellung von Dateien, müssen Sie nur eine Umleitung zu Ihrem wget Befehl hinzufügen:

wget -O - ... http://....  > /dev/null 

-O - zwingt wget, alles zu schreiben, was es auf die Standardausgabe herunterlädt, welches cron Ihnen dann gerne eine E-Mail schickt. Durch Hinzufügen der > /dev/null am Ende des Befehls, wird dieser Ausgang statt der Great Bitbucket in den Himmel gehen. Wenn Sie wget's stderr-Ausgabe auch nicht per E-Mail möchten, können Sie auch eine 2&>1 nach der /dev/null hinzufügen, die stderr weiter nach stdout umleitet, die jetzt nach/dev/null geht.

+0

+1. Verwenden Sie 'which php', um den vollständigen Pfad zur ausführbaren PHP-Datei zu ermitteln. –

0

einfach und sicher (keine tmp-Dateien) Weg, dies zu tun, ist die Substitution bash Prozess zu verwenden:

* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)" 

Prozess Substitution führt den Befehl innerhalb <() und setzt die Ausgabe in eine Datei-Objekt, das nur sichtbar ist, aus dem aktuellen Prozess. Um es von cron aus zu verwenden, rufen Sie bash direkt auf und übergeben es als Befehlszeichenfolge.

Und wie andere erwähnt haben, verwenden Sie den vollständigen Pfad zu PHP, den Sie mit which php herausfinden können.

7

versuchen

die

Der Weg php, die zurückgegeben wird, sollte mit dem Befehl gesetzt werden, die den Cron file.If laufen geben Sie die Cron durch Shell einrichten, es wird kein Problem geben, aber um sicher zu sein, versuchen Sie absolute Pfad angeben, wenn Sie versuchen, eine PHP-Seite auszuführen.

/path/to/php/path/to/cron/script/

Versuchen Sie, Ihre comand so zu geben, wenn das Problem weiterhin besteht, fühlen sich frei zu diskutieren.