Laravel 4.2 中自定义命令的 Cron 作业

Cron job of my custom command in Laravel 4.2

我知道现在有 Laravel 5.* 但出于多种原因我正在使用 Laravel 4.2

我有一个自定义命令,在 fire() 方法中,我导入一个文件并将信息播种到我的数据库中,所以我的 class 有点像这样

class SeedDataFile extends Command {
    protected $name = 'import:file';

    public function fire(){
    $command = 'mongoimport --db things --collection users --type csv --file file.csv --headerline';
    $result = exec($command, $output, $return);
    }
}

我想要播种数据的文件,即每 12 小时一次(考虑到文件每 12 小时会随新数据发生变化),但作为用户,我不想在我的终端中键入命令:

php artisan import:file

..每 12 小时(我只想将新文件上传到我的项目)。

所以 cron 作业是我完成所有工作的地方,但我不想这样做:

crontab -e

并编辑文件

我想在代码中的某个地方 class 设置我的命令的时间表,自定义命令会自动 运行 每天直到确定的日期。

这可能吗?或者我必须配置 crontab 文件?

你可以看看这个包,描述说它完全符合你的要求

https://github.com/Indatus/dispatcher

原样 Laravel 4.2 不提供此类功能。事实上,无论您使用的是哪个版本,您都需要为此功能设置 1 个 cron 作业。

较新版本的 Laravel 确实提供了 this functionality,但它们仍然要求您以 [=39] 可用的最高频率设置 1 个 cron 作业(Windows 上的调度程序) =]的命令php artisan schedule:run.

如果您想在代码(而不是 cron 文件)中安排命令,您可以复制 Laravel 的较新版本所做的事情。

1. 你会创建一个 "master" 命令,我们称它为 TaskSchedulerCommand 并且假设它的签名是 php artisan schedule.

2. 您将在 TaskSchedulerCommand 上以最高频率创建一个 cronjob,如下所示: * * * * * php /path/to/artisan时间表`

3. 你可以在 TaskSchedulerCommmand

中编写其他命令的所有调度逻辑