使用Crontab配置Laravel任务调度

3

我创建了一个Laravel任务并将其添加到我的Crontab文件中。


app/Console/Kernel.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');
    }
}

定时任务文件

*       *       *       *       *       /usr/local/bin/php artisan schedule:run
*       *       *       *       *       php artisan schedule:run

结果

由于某些原因,我的定时任务没有触发。

5分钟后,我在public/tasks/文件夹中没有看到任何生成的内容。

我甚至尝试将完整路径放入我的php

我是否遗漏了什么?如何调试此问题?


在您的crontab中,您必须为artisan命令使用完整路径。php /path/to/your/project/artisan schedule:run - zorx
PHP怎么样?不需要吗? - code-8
我猜/usr/local/bin/已经在你的PATH中了,所以不需要了。 - zorx
好的。我很难找到我的完整工匠之路。 - code-8
1个回答

6

在您的crontab中,您需要设置路径以指向项目根目录中的artisan文件。

* * * * * php /path/to/project/artisan schedule:run

如果您无法找到项目路由的绝对路径,请打开终端,cd到项目路由目录,然后使用pwd命令,该命令将为您提供绝对目录。

例如:

$ cd MyUser/dev/project
$ pwd

将输出类似于

/Users/MyUser/dev/project

那么你的cronjob看起来应该是这样的

* * * * * php /Users/MyUser/dev/project/artisan schedule:run

还可以尝试重新启动cron守护程序。我发现有时候当事情不能运行时,这会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接