在特定时间运行Laravel Task

eca*_*ver 5 cron task laravel

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

Ant*_*iro 10

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

crontab -e
Run Code Online (Sandbox Code Playgroud)

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

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

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

1 0 * * *  php /var/www/myBlog/artisan task:run
Run Code Online (Sandbox Code Playgroud)

这个命令将在每天的第一分钟(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)
Run Code Online (Sandbox Code Playgroud)

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

0    12    *    *    0  <command to execute>
Run Code Online (Sandbox Code Playgroud)

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

Route::get('/task/run',array('uses'=>'TaskController@run'));
Run Code Online (Sandbox Code Playgroud)

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

0  12  *  *  0  curl http://mysite.com/run/task
Run Code Online (Sandbox Code Playgroud)