Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Вы пытались запустить 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
Полный ответ на этот вопрос не указан выше, насколько я могу судить. Предположим, что наше расписание выглядит следующим образом:
protected function schedule(Schedule $schedule)
{
$schedule
-> command('cbh:dummyCommand')
-> everyFiveMinutes()
-> appendOutputTo ('/my/logs/laravel_output.log');
}
Я обнаружил, что этот код не запускает вашу работу каждые 5 минут. Это также предотвращает повторную команду, если она была запущена менее 5 минут назад.
Лучший способ подумать о том, что этот код задает именованную команду ", которая будет выполняться каждый раз минутная цифра текущего времени - 0
или 5
". Другими словами, если я запустил аргумент командной строки: php artisan schedule:run
в 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. Но это трудно сказать, не зная немного больше о вашей среде.
NB: Это не ответ на этот вопрос, а подсказка для тех, кто отлаживает php artisan schedule:run
вручную. Надеюсь, что это избавит кого-то несколько минут от головной боли.
Проверьте, может ли запланированное задание работать немедленно. Вы можете использовать для этого метод exec
.
<?php
...
protected function schedule (Schedule $schedule) {
$schedule -> exec("php artisan your:command");
}
Причиной этого является то, что вы можете планировать запуск задачи в определенное время и, если это время еще не наступит, он выведет: «Никакие запланированные команды не готовы к запуску».
php artisan your:command
с консоли, он работает. но когда я помещаю что-то вроде графика защищенных функций (Schedule $ schedule) {$ schedule- & gt; command ('my: command') - & gt; dailyAt ('13: 40 ') - & gt; withoutOverlapping (); } он не получает запланированных и выполненных, даже если я жду целый день.
– sabertooth1990
26 October 2016 в 10:24
artisan schedule:run
? Перечислите все активные клоны, используя: crontab -l
, если он не является частью списка - обратите внимание на / path / to / artisan i> - добавьте следующую строку в ваш crontab -e
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
– David Lartey
26 October 2016 в 10:29
Я понял, что проблема в форме меня была методом
->withoutOverlapping()
. Как только я удалил этот метод, мои команды начали работать и были найдены процессом daemon.
Я думаю, что может быть ошибка в методе, но мой проект на данный момент может немного накладываться, так что это круто.
withoutOverlapping
не может работать в вашем случае. У меня была аналогичная проблема, но я хотел сохранить наложенную проверку на месте. В моем случае возникла проблема с перезагрузкой экземпляра.
– Gustavo Straube
7 March 2018 в 11:57
storage/framework
. Однако запуск php artisan cache:clear
сделал трюк.
– Gustavo Straube
7 March 2018 в 12:06
withoutOverlapping
, истекает через 24 часа (!) По умолчанию. В моем случае было бы гораздо разумнее использовать его, как ->withoutOverlapping(5)
, в котором говорится, что флаг должен истечь через 5 минут.
– AlbinoDrought
9 May 2018 в 17:05
Я думаю, что мой блог поможет вам ответить на ваш вопрос. Пожалуйста, см. Ниже или ссылку: 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
Вот и все. Спасибо, что поговорили, чтобы прочитать это.
Плановые запланированные команды 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 утра по местному времени в Америке / Боготе.
Когда вы запускаете
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
everyTenMinutes()
, но поскольку RS выполнял скрипты через две-три минуты после точной отметки в десять минут, задачи планировщика не выполнялись. Мое решение состояло в том, чтобы использовать everyMinute()
, поскольку эта частота для меня в порядке.
– Soulriser
21 March 2018 в 14:56
В Windows я исправил эту проблему, установив Запланированную задачу для запуска каждую минуту (хотя я хотел только запускать команду один раз в день), в противном случае я всегда получал сообщение No scheduled commands are ready to run.
.
$commands
. Все функциональные возможности работают как ожидалось - единственная проблема заключается в том, что cron не запускает их для запуска, просто отображая сообщение, указанное в моем вопросе. благодаря – user 8 June 2015 в 14:59* * * * * php /home/privates/public_html/staging/current/artisan schedule:run
. – chanafdo 8 June 2015 в 15:17