Laravel "Никакие запланированные команды не готовы к запуску".
Я установил следующие команды Laravel:
protected function schedule(Schedule $schedule) {
$schedule->command('command:daily-reset')->daily();
$schedule->command('command:monthly-reset')->monthly();
}
Затем на моем сервере я установил задание cron для запуска один раз в день (в 00:00).
0 0 * * * php /home/privates/public_html/staging/current/artisan schedule:run
Мое задание cron работает успешно каждую ночь, но журналы просто говорят: "Никакие запланированные команды не готовы к запуску".
Что я делаю неправильно? Я ожидал, что моя команда daily
будет запускаться каждую ночь.
Спасибо!
Ответы
Ответ 1
Вы пытались запустить команду manuallay?
Запустите php artisan
и проверьте, зарегистрированы ли ваши команды.
Если вы зарегистрировали свои команды, вы должны увидеть command:daily-reset
и command:monthly-reset
в списке доступных команд мастеров.
Если вы их не видите, продолжайте и зарегистрируйте свои команды, добавив его в свойство commands
, доступное в app/Console/Kernel.php
.
protected $commands = [
'App\Console\Commands\YourFirstCommand',
'App\Console\Commands\YourSecondCommand'
];
Измените запись crontab на
* * * * * php /home/privates/public_html/staging/current/artisan schedule:run
Ответ 2
При запуске
php artisan schedule:run
на сервере, где хранится ваш проект, вы можете увидеть все ваши команды, запущенные с выходом, выглядящими так:
"Running scheduled command: '/usr/local/bin/php' 'artisan' cache:update > '/dev/null' 2>&1 &"
но только если текущее время является точным, для которого запланирована команда. В противном случае вы увидите этот вывод:
"No scheduled commands are ready to run."
Например, если вы планируете команду каждые пять минут и запустите команду в 09:07 часов, вы увидите, что нет запланированных команд, но если вы запустите ее в 09:10, вы увидите свою команду Бег.
Таким образом, вы можете просто планировать свою команду для запуска каждые 5 минут только для целей отладки:
$schedule->command('command:daily-reset')->everyFiveMinutes();
затем наблюдайте, есть ли какая-либо ошибка во время работы и в конечном итоге ее исправить. По мне проблема заключалась в том, что я не установил GuzzleHttp (позор), поэтому исправление просто запускало это в терминале:
composer require guzzlehttp/guzzle
Ответ 3
Я понял, что проблема для меня заключалась в следующем методе:
->withoutOverlapping()
Как только я удалил этот метод, мои команды начали выполняться и находились в процессе демона.
Я думаю, что в этом методе может быть ошибка, но мой проект на данный момент может немного перекрываться, так что это круто.
Ответ 4
NB: Это не ответ на этот вопрос, а подсказка для тех, кто отлаживает с помощью php artisan schedule:run
вручную. Надеюсь, что это избавит кого-то несколько минут от головной боли.
Убедитесь, что запланированное задание можно запустить немедленно. Вы можете использовать для этого метод exec
.
<?php
...
protected function schedule (Schedule $schedule) {
$schedule -> exec("php artisan your:command");
}
Причиной этого является то, что вы можете планировать запуск задачи в определенное время, и если это время еще не наступит, оно выведет: "Никакие запланированные команды не готовы к запуску".
Ответ 5
Плановые запланированные команды Laravel основаны на часовом поясе, который вы настроили в файле app/config/app.php(laravel 5.1):
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'America/Bogota',
Итак, если вы создадите команду и зарегистрируете ее для запуска в качестве запланированной задачи с помощью:
$schedule->command('command:daily-reset')->daily();
он будет запускаться каждый день в 00:00 УКАЗАННОГО ВРЕМЕНИ (в данном случае Америка/Богота)
То же самое применяется, если указать время для запуска задачи:
$schedule->command('command:daily-reset')->daily()->at('02:30');
Это будет работать в 02:30 утра по местному времени в Америке/Боготе.
Ответ 6
Полный ответ на этот вопрос не указан выше, насколько я могу судить. Предположим, что наше расписание выглядит следующим образом:
protected function schedule(Schedule $schedule)
{
$schedule
-> command('cbh:dummyCommand')
-> everyFiveMinutes()
-> appendOutputTo ('/my/logs/laravel_output.log');
}
Я обнаружил, что этот код не запускает вашу работу каждые 5 минут. Это также предотвращает повторную команду, если она была запущена менее 5 минут назад.
Лучший способ подумать о том, что этот код устанавливает именованную команду "быть запущенной каждый раз, когда минутное значение текущего времени равно 0
или 5
". Другими словами, если я запустил аргумент командной строки: php artisan schedule:run
at 11:04
, тогда ответ будет выглядеть следующим образом:
# No scheduled commands are ready to run.
Но если я запустил ту же команду в 11:00
или 11:05
, мы получим:
# Running scheduled command: php artisan cbh:dummyCommand >> /my/logs/laravel_output.log 2>&1
И я получаю вывод в своем лог файле.
Я обнаружил выше, когда мой расписание everyFiveMinutes()
создавал журнал в моем файле каждые 10 минут на основании того факта, что мой планировщик задач выполнялся каждые 2 минуты.
Однако это не совсем относится к вашей проблеме, учитывая, что расписание daily()
(0 0 * * *
) совпадает с вашим расписанием cron-job. Единственное, что я могу себе представить, это то, что есть некоторая несогласованность с вашими часовыми поясами, как это предлагает @Octavio Herrera. Но это трудно сказать, не зная немного больше о вашей среде.
Ответ 7
Я думаю, что мой блог поможет вам ответить на ваш вопрос. См. Ниже или ссылку: Laravel Crontab
Во многих проектах вам нужно использовать crontab (задания cron) для выполнения некоторых задач по отправке электронной почты или удалению записей об ошибках в БД. С Laravel Project вы можете сделать это проще.
Будьте достаточно сильными, чтобы уйти и достаточно терпеливы, чтобы дождаться того, чего заслуживаете
Будьте достаточно сильными, чтобы отпустить и достаточно терпеливы, чтобы дождаться того, чего вы заслуживаете.
Создайте команду в Laravel 4:
<?php
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FirstCommand extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'user:active';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
echo "User Actived";
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
);
}
}
В следующем шаге вам нужно зарегистрировать команду с помощью CLAR Laravel. Так легко, вы открываете файл app/start/artisan.php и добавляете одну строку, как показано ниже:
Artisan::add(new FirstCommand);
Вы закончили создание команды Laravel. Чтобы проверить, вы можете использовать следующую команду:
$ php artisan user:active
Пользователь активен
Вышеприведенный результат означает, что вы успешно зарегистрируете команду.
Наконец, введите команду в crontab:
crontab -e
Добавить строку (запустить команду каждые 2 минуты):
*/2 * * * * php path_to_laravel_project/artisan user:active
Вот и все. Спасибо, что поговорили, чтобы прочитать это.
Ответ 8
В Windows я устранил эту проблему, настроив запуск запланированной задачи каждую минуту (хотя я хотел запускать команду только один раз в день), в противном случае я всегда получал сообщение No scheduled commands are ready to run.
.
Ответ 9
У меня такая же проблема. Каждая команда была правильно зарегистрирована, но я всегда получал сообщение "Запланированные команды не готовы к выполнению".. Проблема заключалась в том, что веб-сайт находился в "режиме обслуживания" (команда php artisan down), пока мы выполняли обновления и тесты.