2013-06-15 8 views
5

Ich habe einige ähnliche Fragen an SO gesehen, aber keiner von mir hat dann geantwortet. Ich hatte noch nie zuvor von CRON gehört und ich bin neu in Laravel. Was ich brauche, ist eine Aufgabe einmal pro Woche auszuführen, um einige Aktionen in meiner Datenbank (MySql) durchzuführen, sagen wir jeden Sonntag um 12:00 Uhr. Wie könnte ich dieses Ziel erreichen?Running Laravel Aufgabe zu einer bestimmten Zeit

+0

Entschuldigung, ich bearbeite immer noch den anwser –

Antwort

10

Wenn Sie cron verwenden können, müssen Sie nur noch

crontab -e 

Oder ausführen, wenn Sie als root ausführen müssen:

sudo crontab -e 

Dies wird mit einem Texteditor öffnen, so können Sie Ihre ändern crontab und dort finden Sie eine Zeile für jeden geplanten Befehl, wie diese haben:

1 0 * * * php /var/www/myBlog/artisan task:run 

Der Befehl in diesem wie wi ll werden in der ersten Minute eines jeden Tages ausgeführt (0h01 oder 12h01). Hier

ist die Erklärung für alles:

* * * * * <command to execute> 
┬ ┬ ┬ ┬ ┬ 
│ │ │ │ │ 
│ │ │ │ │ 
│ │ │ │ └───── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names) 
│ │ │ └────────── month (1 - 12) 
│ │ └─────────────── day of month (1 - 31) 
│ └──────────────────── hour (0 - 23) 
└───────────────────────── min (0 - 59) 

Also, in Ihrem Fall, werden Sie eine Zeile wie diese erstellen:

0 12 * * 0 <command to execute> 

Aber wie macht man das für eine Aufgabe in Laravel? Es gibt viele Möglichkeiten, eine davon ist in meinem ersten Beispiel: Erstellen Sie einen Handwerkerbefehl (Aufgabe: Ausführen) und führen Sie dann einfach Handwerker aus, oder Sie können einfach eine Route in Ihrer App erstellen, die Ihre Aufgabe jedes Mal aufruft, wenn sie getroffen wird :

Route::get('/task/run',array('uses'=>'[email protected]')); 

und dann muss man es einfach Ihre crontab hinzufügen, aber Sie werden etwas benötigen eine uRL, wie wget oder curl zu treffen: kann

0 12 * * 0 curl http://mysite.com/run/task 
+0

Ja, ich habe das bei Wikipedia gesehen, aber ich kann immer noch nicht sagen, wie ich diese Befehle ausführen soll. Ich arbeite in Windows, also kann ich 'sudo' nicht benutzen.Neben meiner App ist in der Entwicklung, würde dies immer noch funktionieren, wenn es um die Produktion geht? – ecampver

+0

Cron ist im Grunde ein Taskplaner, Sie haben auch das für Windows (http://puu.sh/3gDDl.png). Oder Sie können Cron für Windows installieren, es liegt an Ihnen. Und Sie bauen eine Website, wie ich schon sagte, Sie können eine URL erstellen, die Ihre Aufgaben intern ausführen: TaskController == Ihr Controller Lass, run = Ihre Methode, sobald Ihre Methode ausgelöst wird, können Sie ausführen, was Sie brauchen , Sie brauchen nur etwas, um diese URL zu treffen, und das ist Ihr Taskplaner. –

+0

Ok, ich kann das jetzt nicht testen, aber ich vertraue dir. Vielen Dank ;) – ecampver

2

Sie erstellen und Ihre Laravel Aufgaben ausführen von der Befehlszeile aus wie jeder andere Artisan-Befehl. Also, wenn Sie auf Windows sind, können Sie einfach den Befehl manuell ausführen, um zu sehen, ob es funktioniert oder nicht.

Wenn Sie dann auf dem Produktionsserver sind (besser natürlich, wenn es auf Unix basiert), können Sie Antonio's Anweisungen folgen, um den Cron-Job zu erstellen und zum Cron-Tab hinzuzufügen. Denken Sie daran, dass Sie die vollständigen Pfade für die Ausführung von PHP kennen müssen.

Mein Tutorial erklärt das alles im Detail: http://maxoffsky.com/code-blog/practical-laravel-using-cron-jobs-in-laravel/

Hoffe, dass Sie die Antwort zu finden, die Sie suchen.

3

Seit Laravel 5, der einzige Eintrag müssen Sie in crontab setzen nach crontab -e Ausführung ist

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1 

Erinnern /path/to/artisan Teil zu einem Projekt bestimmten Pfad zu ändern.

Und dann können Sie Ihre geplanten Aufgaben und Lauffrequenz in Laravels Klasse definieren. Weitere Informationen finden Sie in der Laravel-Dokumentation: Task Schedule

Verwandte Themen