配置Crontab以执行Laravel任务调度

时间:2016-10-21 18:12:30

标签: laravel laravel-5 cron scheduled-tasks

我在我的cron文件中设置了这个

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

我的Kenel.php中有这个

<?php

namespace App\Console;

use Carbon;

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

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\Inspire::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $now = Carbon\Carbon::now('America/New_York');
        $dt = Carbon\Carbon::parse($now);
        $time_start = $dt->toTimeString();
        $dt = str_replace('-','_',$dt);
        $dt = str_replace(' ','_',$dt);
        $dt = str_replace('/',':',$dt);
        $schedule->exec('curl '.env('APP_URL').'fbwifi/acl_update')->everyMinute()
            ->sendOutputTo(public_path().'/tasks/log_'.$dt.'.txt');
    }
}

如果我手动运行

php artisan schedule:run

我得到了

Running scheduled command: curl http://localhost:8888/fbwifi/acl_update > '/Applications/MAMP/htdocs/code/site/portal/public/tasks/log_2016_10_21_14:01:33.txt' 2>&1 &

我看到文件生成的日志文件非常好。

然后,我再等5分钟,我什么也看不见。 我想再生成5个日志。

我做错了什么吗?我该如何检查?

我现在正在接受任何建议。

任何提示/建议/帮助都将非常感谢!

1 个答案:

答案 0 :(得分:2)

不要在cron中使用php artisan schedule:run,而是创建一个shell脚本:

#!/bin/bash

/full/path/to/php /full/path/to/artisan schedule:run >> /tmp/debug.log 2>&1

在crontab中,放置此shell脚本的完整路径。

你的crontab每分钟运行一次。如果你想每5分钟一次,请使用:

*/5 * * * * /home/user/myshellscript.sh

然后,您可以检查/tmp/debug.log是否有错误。

如果您不想使用bash scipt,请在​​crontab中尝试:

*/5 * * * * /full/path/to/php /full/path/to/artisan "schedule:run" >> /tmp/debug.log 2>&1