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

时间:2017-01-13 15:19:32

标签: laravel laravel-4 cron task

我知道现在有Laravel 5. *但由于很多原因我使用的是Laravel 4.2

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

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个小时的文件随新数据而变化),但作为用户,我不想在终端中输入命令:< / p>

php artisan import:file

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

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

crontab -e

并编辑文件

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

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

2 个答案:

答案 0 :(得分:1)

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

https://github.com/Indatus/dispatcher

答案 1 :(得分:0)

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

较新版本的Laravel确实提供了this functionality,但它们仍然要求您以最高频率为Laravel的命令php artisan schedule:run设置1个cron作业(Windows上的调度程序)。< / p>

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

1。你会创建一个&#34; master&#34;命令,让我们称之为TaskSchedulerCommand并让它说它的签名是php artisan schedule

2。你会在TaskSchedulerCommand上以最高频率创建一个cronjob,如:* * * * * php / path / to / artisan schedule`

3。您可以在TaskSchedulerCommmand

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