Laravel设置,尝试让cronjob在php laravel文件中调用一个函数

时间:2015-06-05 01:14:13

标签: php laravel laravel-4 cron laravel-5

原帖

晚上好人。我有一个laravel设置,我试图让一个cronjob执行一个php函数到laravel项目目录中的文件。

当我尝试做类似的事情时,我得到了类和名称空间错误:

<?php
require_once('../laravel/app/Http/Controllers/NotificationsController.php');

然后调用processQueuedNotifications()函数。

这当然给了我错误,在laravel目录中调用我的函数的正确方法是什么?我需要调用这个函数,因为这个函数有必要的所有正确的命名空间和扩展控制器正确执行功能。

更新1:

感谢@michael,我已经了解了Laravel中一个名为commands的组件。

所以我运行了这段代码: php artisan make:console processQueuedNotifications 它在控制台目录中创建了一些文件。

目前正在探索下一步该做什么。

  1. 在查看Event文件使用的kernel.php类之后,我注意到这个类为我提供了一个易于使用的界面,可以动态创建cron作业。我这么认为是正确的吗?

  2. 我注意到每分钟都没有运行cron作业的功能,编辑Events类文件是否安全,而不会被未来的make:console命令或laravel更新覆盖?

  3. 我在kernel.php文件中看到了这段代码:

    $schedule->command('inspire')
                     ->hourly();
    
  4. 这是你想让我添加我的功能的地方吗?我注意到启发功能是自动创建的,以便我了解发生了什么?

    所以我会写,

    $schedule->command('processQueuedNotifications')
                     ->everyMinute();
    //Providing it's safe to edit the Event's class or figure out a clean way of doing so without my code being deleted in the future on Laravel updates.
    

2 个答案:

答案 0 :(得分:1)

一种非常方便的方法是使用laravels控制台组件。您可以通过发出

来创建新命令
php artisan make:console

然后在app/console目录中找到它。确保在创建后在Kernel.php文件中启用该命令。

只需在命令中通过cron调用您的类或任何您想要运行的内容。控制台命令本身可以通过cli调用,就像运行laravels php artisan ...命令一样。您可以在为您创建的文件中进行设置。例如,您可以随时随地使用

调用该文件
/usr/bin/php /path/to/file/artisan my:command

如果需要,您可以设置选项和参数。

以下是文档:http://laravel.com/docs/5.0/commands / http://symfony.com/doc/current/components/console/introduction.html

kernel.php中有一个数组需要注册你的类(包括命名空间)。之后它可以通过cli调用。首先,看看您可以初始化的参数和选项,以防您需要在控制器类上发出不同的请求。 (您为控制台命令选择的文件名是一个参数。您可以根据自己的命令对它们进行必要或可选。)

在您的文件中,您可以通过使用以下值在适当的方法中创建数组来创建它们:

 [$name, $mode, $description, $defaultValue]

看看文档或Jeffrey的laracasts,它们非常好。

要仅从控制台命令调用您的类,只需在文件的上一部分命名您的命令,并像控制器​​一样调用控制器

(new namespace\controller)->method();

答案 1 :(得分:1)

在更新后,您可以在代码中执行以下两项选择:

  1. 使用总线外观直接从代码中调度命令
  2. 首先使用 use Illuminate\Support\Facades\Bus;

    然后在你的代码中

    Bus::dispatchNow(new YourCommandClass);
    

    (不要忘记导入命令类)

    1. 使用相同的总线外观将其分配给队列进程:
    2. (仍然以相同的方式导入)

      Bus::dispatch(new YourCommandClass);
      

      (请注意,在这种情况下,您需要通过cron作业运行以下命令:

      php artisan queue:listen
      

      它可以处理几个选项,例如--tries = X,其中is是尝试次数等

      一般来说,您可以从输入php artisan my:command -h

      的命令中获取更多信息