在特定时间运行Laravel Task

时间:2013-06-15 23:24:52

标签: cron laravel task

我在SO看到了一些类似的问题但是没有一个人回答过我。我之前从未听说过CRON,而且我是Laravel的新手。我需要的是每周运行一次Task来对我的数据库(MySql)执行一些操作,比如每个星期天凌晨12:00。我怎么能实现这个目标呢?

3 个答案:

答案 0 :(得分:10)

如果你可以使用cron,你只需要执行

crontab -e

或者,如果您需要以root身份运行:

sudo crontab -e

这将打开一个文本编辑器,这样你就可以修改你的crontab,每个预定的命令就会有一行,就像这一行:

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

此类命令将在每天的第一分钟(0h01或12h01am)执行。

以下是对此的解释:

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

因此,在您的情况下,您将创建一个这样的行:

0    12    *    *    0  <command to execute>

但是你如何为Laravel的任务做到这一点?有很多方法,其中一个是我的第一个例子:创建一个工匠命令(任务:运行),然后只是运行工匠,或者你可以在你的应用程序中创建一个路径,每次它被命中时都会调用你的任务:

Route::get('/task/run',array('uses'=>'TaskController@run'));

然后你只需要添加你的crontab,但是你需要点击你的网址,比如wget或curl:

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

答案 1 :(得分:3)

自Laravel 5以来,执行crontab -e后需要输入crontab的唯一条目是

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

请务必将/path/to/artisan部分更改为项目特定路径。

然后,您可以在Laravel的App\Console\Kernel课程中定义计划任务和运行频率。有关更多信息,请参阅Laravel文档:Task Schedule

答案 2 :(得分:2)

您可以从命令行创建和运行laravel任务,就像任何其他Artisan命令一样。因此,如果您在Windows上,您可以手动运行该命令以查看它是否有效。

然后当你在生产服务器上时(当然,如果它是基于Unix的更好)那么你可以按照Antonio的指示创建cron作业并将其添加到cron选项卡。请记住,您需要知道PHP执行的完整路径。

我的教程详细解释了这一点:http://maxoffsky.com/code-blog/practical-laravel-using-cron-jobs-in-laravel/

希望你能找到你想要的答案。