在Mac上启动Laravel cron作业

时间:2017-03-21 10:03:44

标签: php macos laravel laravel-5 cron

我在 Laravel 5.4 调度程序中安排了一个命令,并希望在 Mac OS X El Capitan 上启动Laravel cron。

应用程序/控制台/ Kernel.php

<?php
namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected $commands = [
        'App\Console\Commands\GetToken'
    ];

    protected function schedule(Schedule $schedule) {
        $schedule->command('gettoken')->everyMinute();
    }

    protected function commands() {
        require base_path('routes/console.php');
    }
}

我的GetToken.php进行API调用,然后进行数据库更改。我相信这是正常的,因为我可以使用以下命令直接从cli运行任务:

  

php / path / to / project / artisan schedule:run 1&gt;&gt; / dev / null 2&gt;&amp; 1

要编辑我的cron文件,我使用:

  

env EDITOR = nano crontab -e

然后我添加:

* * * * * php /path/to/project/artisan schedule:run >> /dev/null 2>&1

我用ctrl + o保存并用ctrl + x退出。

重新编辑文件显示更改已保存。

运行 crontab -l <​​/ strong>会显示我在crontab文件中输入的文字。

我的cron永远不会运行。我只能通过使用上面提到的命令手动运行来运行一次。

1 个答案:

答案 0 :(得分:25)

不是直接回答你的问题,而是提出另一个解决方案:

如果要为开发环境设置cron作业,最好使用Homestead,以符合其Linux标准。

对于直接在macOS中开发的小项目,我在项目根目录(在单独的终端选项卡中)中运行以下命令,让我的作业每分钟运行一次:

while true; do php artisan schedule:run; sleep 60; done

这有助于确保cron作业仅在我开发时运行。当我完成后,我Ctrl+C那个命令,可以确定在我不看的时候没有意外发生。

另外,通过简单地为睡眠命令选择另一个秒数,它可以让我自由地调整间隔。这可以节省开发时间。