2013-06-15 14 views
5

Widziałem podobne pytania w SO, ale żaden z nich nie odpowiedział. Nigdy wcześniej nie słyszałem o CRON i jestem nowy w Laravel. To, czego potrzebuję, to uruchamianie zadania raz w tygodniu w celu wykonania niektórych czynności w mojej bazie danych (MySql), co niedziela o godzinie 00:00. Jak mogę osiągnąć ten cel?Uruchamianie zadania Laravel w określonym czasie

+0

Przepraszam, nadal edytuję anwser. –

Odpowiedz

10

Jeśli można użyć crona, po prostu trzeba wykonać

crontab -e 

Lub, jeśli trzeba uruchomić jako root:

sudo crontab -e 

Spowoduje to otwarcie edytora tekstu, dzięki czemu można zmodyfikować crontab i tam będziesz miał jeden wiersz dla każdego zaplanowanego polecenia, jak ten jeden:

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

polecenie w tym jak Wi Będą wykonywane w pierwszej minucie każdego dnia (0h01 lub 12h01am).

Oto wyjaśnienie tego wszystkiego:

* * * * * <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) 

więc w Twoim przypadku, musisz utworzyć linię:

0 12 * * 0 <command to execute> 

Ale jak to zrobić dla zadania w Laravel? Jest wiele sposobów, jeden z nich jest na moim pierwszym przykładzie: stwórz polecenie rzemieślnika (zadanie: uruchom), a następnie po prostu uruchom rzemieślnika, lub możesz po prostu utworzyć trasę w swojej aplikacji, która będzie wywoływać twoje zadanie za każdym razem, gdy zostanie trafiona :

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

a potem po prostu trzeba je dodać swoją crontab, ale trzeba coś trafić adresu URL, jak wget lub curl:

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

Tak, widziałem to w Wikipedii, ale nadal nie wiem, jak powiedzieć mojej aplikacji, aby uruchomić te polecenia, poza tym, że " m działa w Windowsie, więc nie mogę używać 'sudo'.Poza tym, że moja aplikacja jest w fazie rozwoju, czy nadal będzie działać, gdy przejdzie do produkcji? – ecampver

+0

cron to w zasadzie Task Scheduler, masz go również na windows (http://puu.sh/3gDDl.png). Lub możesz zainstalować crona dla Windows, to zależy od Ciebie. I budujesz stronę internetową, jak już powiedziałem, możesz stworzyć adres URL, który będzie wykonywał twoje zadania wewnętrznie: TaskController == twój kontroler lass, run = twoja metoda, jak tylko twoja metoda zostanie odpalona, ​​możesz wykonać wszystko, czego potrzebujesz , potrzebujesz tylko czegoś, co trafi w ten URL, a to jest twój Harmonogram zadań. –

+0

OK, nie jestem w stanie przetestować tego teraz, ale ufam ci. Dzięki ;) – ecampver

2

można tworzyć i uruchamiać zadania laravel z wiersza poleceń, tak jak każde inne polecenie Artisana. Więc jeśli jesteś w systemie Windows, możesz po prostu uruchomić polecenie ręcznie, aby sprawdzić, czy działa, czy nie.

Następnie, gdy jesteś na serwerze produkcyjnym (oczywiście lepiej, jeśli jest oparty na Uniksie), możesz podążać za kierunkiem Antonio, aby utworzyć zadanie cron i dodać je do karty cron. Pamiętaj, że musisz znać kompletne ścieżki do wykonania PHP.

Mój poradnik wyjaśnia to wszystko w szczegółach: http://maxoffsky.com/code-blog/practical-laravel-using-cron-jobs-in-laravel/

Mam nadzieję znaleźć odpowiedź, że szukasz.

3

Od laravel 5, tylko wejście trzeba umieścić w crontab po wykonaniu crontab -e jest

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

Pamiętasz zmienić /path/to/artisan część ścieżki do konkretnego projektu.

Następnie można zdefiniować zaplanowane zadania i częstotliwość pracy w klasie Laravel: App\Console\Kernel. Zobacz dokumentację Laravel, aby uzyskać więcej informacji: Task Schedule