Laravel 5.2 Cron не работает на Centos

Когда я пытаюсь запустить Task Schedule на локальном хосте (версия php: PHP 5.6.4-4ubuntu6.4 (cli)), он работает отлично.

кронтаб

* * * * * php /home/aishatest/public_html/Aisha/Aisha/artisan schedule:run >> /dev/null 2>&1

Приложение/Консоль/Kernel.php

<?php

namespace App\Console;

use App\Console\Commands\CheckOutfitAvailibilityCommand;
use App\Http\Controllers\OutfitCronController;
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 = [
        // Commands\Inspire::class,
        CheckOutfitAvailibilityCommand::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        \Log::error("Kernel");
        //$schedule->command('inspire')
        //         ->everyMinute();
        $schedule->command('CheckOutfitCommand')->cron('* * * * *');
    }
}

Приложение/Консоль/Команда/CheckOutfitAvailibilityCommand.php

<?php

namespace App\Console\Commands;

use App\Http\Controllers\OutfitCronController;
use Illuminate\Console\Command;

class CheckOutfitAvailibilityCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    private $outfitCronController;
    protected $signature = 'CheckOutfitCommand';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(OutfitCronController $outfitCronController)
    {

        parent::__construct();
        $this->outfitCronController = $outfitCronController;
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        \Log::error("command handle");
        $this->outfitCronController->checkOutfitAvailability();
    }
}

Но когда я пытаюсь запустить на сервере CentOs (версия php PHP 5.6.26 (cli)) он выдает ошибку следующим образом

./хранилище/журналы/laravel.log

[2016-09-22 05:54:02] local.ERROR: Kernel  
[2016-09-22 05:54:05] local.ERROR: exception 'ErrorException' with message 'Invalid argument supplied for foreach()' in /home/aishatest/public_html/Aisha/Aisha/vendor/symfony/console/Input/ArgvInput.php:281
Stack trace:
#0 /home/aishatest/public_html/Aisha/Aisha/vendor/symfony/console/Input/ArgvInput.php(281): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Invalid argumen...', '/home/aishatest...', 281, Array)
#1 /home/aishatest/public_html/Aisha/Aisha/vendor/symfony/console/Application.php(743): Symfony\Component\Console\Input\ArgvInput->hasParameterOption(Array, true)
#2 /home/aishatest/public_html/Aisha/Aisha/vendor/symfony/console/Application.php(114): Symfony\Component\Console\Application->configureIO(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /home/aishatest/public_html/Aisha/Aisha/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 /home/aishatest/public_html/Aisha/Aisha/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 {main}  

И если я попытаюсь выполнить команду ниже вручную в терминале, то она также отлично работает.

php /home/aishatest/public_html/Aisha/Aisha/artisan schedule:run

Я пытался найти решение, но не нашел ни одного.


person Rohit shah    schedule 22.09.2016    source источник
comment
Попробуйте изменить текущий каталог на каталог из сценария cron. cd /home/aishatest/public_html/Aisha/Aisha; php artisan schedule:run или даже просто в ~/public_html или ~/public_html/Aisha   -  person Will B.    schedule 24.09.2016
comment
Этот ddnt работает для меня. Все еще получаю ту же ошибку. Спасибо и, пожалуйста, предложите другое решение.   -  person Rohit shah    schedule 24.09.2016


Ответы (1)


используйте абсолютный путь для php

/usr/local/bin/php /path/to/artisan schedule:run >> /dev/null 2>&1

У меня такая же проблема. Задания cron в функции Schedule() Kernels работали, но каждый раз, когда я пытался вызвать консольную команду, возникало исключение.

person Bradley Kovacs    schedule 24.09.2016