我在 SO 看到了一些类似的问题,但没有一个回答我。我以前从未听说过 CRON,而且我是 Laravel 的新手。我需要每周运行一次任务以在我的数据库(MySql)上执行一些操作,比如每周日上午 12:00。我怎样才能实现这个目标?
3 回答
如果你可以使用 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 中的任务做到这一点?有很多方法,其中一个在我的第一个示例中:创建一个 artisan 命令 (task:run),然后运行 artisan,或者您可以在您的应用程序中创建一个路由,该路由将在每次命中时调用您的任务:
Route::get('/task/run',array('uses'=>'TaskController@run'));
然后你只需要将它添加到你的 crontab 中,但你需要一些东西来访问你的 url,比如 wget 或 curl:
0 12 * * 0 curl http://mysite.com/run/task
从 Laravel 5 开始,您需要在执行后放入 crontab 的唯一条目crontab -e
是
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
请记住将/path/to/artisan
部分更改为您的项目特定路径。
然后你可以在 Laravel 的App\Console\Kernel
类中定义你的计划任务和运行频率。有关更多信息,请参阅 Laravel 文档:任务计划
您可以像任何其他 Artisan 命令一样从命令行创建和运行您的 laravel 任务。因此,如果您在 Windows 上,您可以手动运行该命令以查看它是否有效。
然后,当您在生产服务器上时(当然,如果它是基于 Unix 的更好),那么您可以按照 Antonio 的指示创建 cron 作业并将其添加到 cron 选项卡中。请记住,您需要知道 PHP 执行的完整路径。
我的教程详细解释了这一切:http: //maxoffsky.com/code-blog/practical-laravel-using-cron-jobs-in-laravel/
希望你能找到你正在寻找的答案。