Laravel shedule не работает

Расписание Laravel 5 не работает

Моя версия laravel — 5.0.28, я использую cloud9 и добавил эту команду в свой cron:

Я добавил этот код на моем Kernel.php , Я ссылался на этот сайт: https://laravel-news.com/2014/11/laravel-5-scheduler/

Я ждал, и это все еще не работало, поэтому я попытался использовать команду php artisan schedule:run и я получил: No scheduled commands are ready to run.

Поэтому я изменил свой код. Кроме того, этот код не был указан время, поэтому я изменил свой cron указать время, но оно все еще не работает. У меня больше нет идей. пожалуйста помоги. Благодарю.

код

хрон

Решение

Планировщик Laravel работает с командами, а не с методами контроллера:

  1. создать команду:
  1. команда редактирования:
  1. добавить команду к Console\Kernel.php :
  1. используйте команду в планировщике:

Другие решения

Сначала проверьте, работает ли cron на вашем сервере или типе localhost:

если не установлен:

включить планировщик laravel:

и вы можете выбрать редактор, если Vim не открывается напрямую. Обязательно введите туда эту строку внизу:

Чтобы проверить, есть ли у вас настройки внутри laravel, правильно запустите планировщик, запустите это из вашей папки проектов:

это должно выполнить задачи и сказать вам, что делает.

Чтобы завершить ответ @ limonte, создайте консольную команду следующим образом:

Источник

Laravel schedule:run command is not working

I am setting background schedule in laravel on live server (Linux). I am using bitnami. But schedule:run is not working when i am using comand like this:

I also tried like this:

No error occurs but schedule is not working.

When i am trying like that:

without asterisk (*) then it works but only one command processed which I set to every minute in my schedule in kernel like this:

But it only run once when I run schedule:run command after that do nothing. Other commands I am calling hourly, daily etc. are not working at all.

Please can any one tell what could be the problem?

2 Answers 2

Using the Bitnami LAMP Stack available at https://bitnami.com/stack/lamp

These are the steps I followed to successfully set the Schedule on Laravel:

Uncomment the line below on the Apache congirutation file /opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf :

Edit the method schedule on the file /opt/bitnami/frameworks/laravel/app/Console/Kernel.php :

Restart Apache: sudo /opt/bitnami/ctlscript.sh restart apache

  • Run: /opt/bitnami/php/bin/php /opt/bitnami/frameworks/laravel/artisan schedule:run >> /dev/null 2>&1
    • The Laravel Sample project was available at: http://127.0.0.1/laravel/
    • Every minute a «Hello world!» line was added on /tmp/laravel.log

    You should visit:

    Laravel’s php artisan schedule:run command runs schedulers only once. In order to make it work you need to add this command to cron configuration file (crontab) which is located at /etc directory. Follow the following steps:

    Step 1: Add cron entry to crontab file [Open file using nano /etc/crontab ]

    Note: -Meaning of **** is to run the command every minute -root is username, you should specify appropriate username -Please do specify full path to artisan command in your laravel project.

    Step 2: Restart the service

    To check status of cron, run sudo service cron status

    Step 3: Make sure that you have written code in schedule function in App/Console/Kernel. Here is what I wrote there:

    Читайте также:  Смеситель для душа с термостатом не работает

    Laravel provides lots of function to schedule your calls or commands. I have used everyTenMinutes() function. Howeve, Laravel internally works on these schedules, we should only make sure that we are calling schedule:run command frequently using single entry (mentioned in step 1) in cron config file.

    Источник

    Планировщик задач

    Task Scheduling → Community +1 015 16 мая 2016

    Введение

    Раньше вы могли создавать Cron-записи для каждой запланированной задачи на вашем сервере. Но это могло быстро превратиться в рутину, так как планировщик задач больше не находится в системе контроля версий, и вы должны заходить через SSH на свой сервер, чтобы добавить Cron-записи.

    Планировщик команд Laravel позволяет вам гибко и выразительно определить планирование своих команд в самом Laravel. И для этого на вашем сервере необходима только одна Cron-запись. Ваш планировщик задач определён в методе PHP schedule () файла app/Console/Kernel.php . Чтобы помочь вам начать, там уже есть простой пример с методом.

    Запуск планировщика

    При использовании планировщика вам надо добавить на ваш сервер только одну эту Cron-запись. Если вы не знаете, как добавлять Cron-записи на сервер, то можете использовать такой сервис, как Laravel Forge, который может управлять Cron-записями для вас:

    Этот Cron будет вызывать планировщик команд Laravel каждую минуту. Когда будет выполнена команда sh schedule:run , Laravel обработает ваши запланированные задачи и запустит только те задачи, которые должен.

    Определение планировщика

    Вы можете определить все свои запланированные задачи в методе PHP schedule () класса App\Console\Kernel . Для начала давайте посмотрим на пример планирования задачи. В этом примере мы запланируем замыкание PHP Closure , которое будет вызываться каждый день в полночь. В PHP Closure мы выполним запрос БД, чтобы очистить таблицу:

    В дополнение к планированию вызовов PHP Closure вы можете также запланировать Artisan-команды и команды операционной системы. Например, вы можете использовать метод PHP command () , чтобы запланировать Artisan-команду, используя либо имя команды, либо класс:

    Команда PHP exec () может быть использована для обращения к операционной системе:

    Настройки частоты планировщика

    Конечно, есть множество вариантов планировщика, которые вы можете назначить на свою задачу:

    Метод Описание
    ->cron(‘* * * * *’); Запускать задачу по пользовательскому расписанию
    ->everyMinute(); Запускать задачу каждую минуту
    ->everyFiveMinutes(); Запускать задачу каждые 5 минут
    ->everyTenMinutes(); Запускать задачу каждые 10 минут
    ->everyThirtyMinutes(); Запускать задачу каждые 30 минут
    ->hourly(); Запускать задачу каждый час
    ->hourlyAt(17); Запускать задачу каждый час в хх:17 минут (для версии 5.3 и выше)
    ->daily(); Запускать задачу каждый день в полночь
    ->dailyAt(’13:00′); Запускать задачу каждый день в 13:00
    ->twiceDaily(1, 13); Запускать задачу каждый день в 1:00 и 13:00
    ->weekly(); Запускать задачу каждую неделю
    ->monthly(); Запускать задачу каждый месяц
    ->monthlyOn(4, ’15:00′); Запускать задачу 4 числа каждого месяца в 15:00 (для версии 5.2 и выше)
    ->quarterly(); Запускать задачу каждые 3 месяца (для версии 5.2 и выше)
    ->yearly(); Запускать задачу каждый год
    ->timezone(‘America/New_York’); Задать часовой пояс (для версии 5.2 и выше)

    Эти методы могут быть объединены с дополнительными ограничениями для создания ещё более гибкого планировщика, который будет работать только в определённые дни недели. Например, чтобы запланировать команду на еженедельный запуск в понедельник:

    Ниже приведён список дополнительных ограничений в расписании:

    Метод Описание
    ->weekdays(); Ограничить задачу рабочими днями
    ->sundays(); Ограничить задачу воскресеньем
    ->mondays(); Ограничить задачу понедельником
    ->tuesdays(); Ограничить задачу вторником
    ->wednesdays(); Ограничить задачу средой
    ->thursdays(); Ограничить задачу четвергом
    ->fridays(); Ограничить задачу пятницей
    ->saturdays(); Ограничить задачу субботой
    ->between($start, $end); Ограничить запуск задачи между временем начала и конца промежутка (для версии 5.3 и выше)
    ->when(Closure); Ограничить задачу на основе успешного теста
    Читайте также:  Не работает термостат приора признаки неисправности

    Ограничение промежутком времени

    Методом PHP between () можно ограничить выполнение задачи в зависимости от времени дня:

    А методом PHP unlessBetween () можно исключить выполнение задачи в указанный период времени:

    Ограничения успешного теста

    Метод PHP when () может быть использован, чтобы ограничить выполнение задачи на основании результата успешно пройденного теста. Другими словами, если заданное PHP Closure возвращает true , задача будет выполняться до тех пор, пока никакие другие ограничивающие условия не препятствуют её выполнению:

    Метод PHP skip () является инверсией метода PHP when () . Если метод PHP skip () возвращает true , запланированная задача не будет запущена:

    При использовании сцепленного метода PHP when () , запланированная команда выполнится только при условии, что все PHP when () возвратят true .

    Предотвращение перекрытий задач

    По умолчанию, запланированные задачи будут запускаться, даже если предыдущий экземпляр задачи всё ещё выполняется. Чтобы предотвратить это, вы можете использовать метод PHP withoutOverlapping () :

    В этом примере Artisan-команда sh emails:send будет запускаться каждую минуту, если она ещё не запущена. Метод PHP withoutOverlapping () особенно полезен, если у вас есть задачи, которые изменяются коренным образом во время своего выполнения, что мешает вам предсказывать точно, сколько времени данная задача будет выполняться.

    Режим обслуживания

    Запланированные задачи Laravel не будут запускаться, когда Laravel находится в режиме обслуживания, так как мы не хотим, чтобы ваши команды столкнулись с какими-либо незаконченными операциями обслуживания сервера. Но если вы хотите, чтобы задача запускалась даже в режиме обслуживания, вы можете использовать метод PHP evenInMaintenanceMode () :

    Выходные данные задачи

    Планировщик Laravel предоставляет несколько удобных методов для работы с выходными данными, сгенерированными запланированными задачами. Во-первых, используя метод PHP sendOutputTo () , вы можете отправить вывод данных в файл для последующего анализа:

    Если вы хотите добавить вывод в указанный файл, вы можете использовать метод PHP appendOutputTo () :

    Используя метод PHP emailOutputTo () , вы можете отправить по электронной почте выходные данные на адрес по вашему усмотрению. Обратите внимание, что данные должны быть сначала отправлены в файл с помощью метода PHP sendOutputTo () . Перед отправкой на электронную почту результата выполнения задачи вы должны настроить службы электронной почты Laravel:

    Методы PHP emailOutputTo () , PHP sendOutputTo () и PHP appendOutputTo () доступны исключительно для метода PHP command () и не поддерживаются для PHP call () .

    Обработчики прерываний задач

    Используя методы PHP before () и PHP after () , вы можете указать код, который будет выполняться до запуска и после завершения запланированной задачи:

    Пинг URL-адресов

    Используя методы PHP pingBefore () и PHP thenPing () , планировщик может автоматически пинговать заданный URL до запуска и после завершения задачи. Этот метод полезен для уведомления внешней службы, например, Laravel Envoyer, о том, что ваша запланированная задача запустилась или закончила выполнение:

    Использование функций PHP pingBefore ( $url ) или PHP thenPing ( $url ) требует библиотеки Guzzle HTTP.

    Вы можете добавить Guzzle к вашему проекту с помощью менеджера пакетов Composer:

    Вы можете добавить Guzzle к вашему проекту, добавив следующую строку в файл composer.json :

    Читайте также:  Не работает беспроводная мышь как быть

    Комментарии (10)

    Всем привет! У вас заработал крон? Я делаю так:

    Но у меня не работает почему то на Debian 7.8, что я делаю не так?

    В статье >> стало кавычками, посмотри внимательно на свой код.

    это не то что я ищу, тут нарыл (точнее один умный человек сказал), что под рутом вообще нельзя ничего запускать никогда, так что в etc/crontab добавлять не вариант

    В crontab указывается пользователь (после звездочек), обычно это www-data, см. конфиг Apache/nginx/php, какой там пользователь.

    Также можно использовать crontab -eu www-data для правки конфига пльзователья.

    у меня Debian там пишу так /var/spool/cron/crontab/fileusername и тут без указание пользователя, проблема следующая, которая ниже в комменте

    Вообщем понял одно Если писать просто $schedule->command(‘backup:run’); то пашет, а если $schedule->command(‘backup:run’)->dailyAt(’11:00′); или $schedule->command(‘backup:run’)->daily()->at(’11:00′); то не работает. Кто знает почему такое возможно?

    Для виндовса (например если тестирование на локалке на винде проходит)

    This is possible with Windows Task Scheduler but the downside is the lowest it can be set to is Every 5 Minutes which is still ok for a testing environment.
    I created a batch file scheduler.bat with the following contents

    PHP cd c :\ lamp \ www \ cw5
    PHP C :\ lamp \ bin \ php \ php — 5.6.3 \ php . exe artisan schedule : run 1 >> NUL 2 >& 1 .

    Change directorys to match your setup. My project root is cw5
    If you have php successfully added to your PATH variable then the second line can read php artisan. no need for an exact location. But you will need to make sure you cd to your project root first.
    Then launch the task scheduler Windows Key + R then paste in Taskschd.msc and hit enter.
    Then click Create Basic Task on the right in the Actions pane.
    Name your task something so you will know what it is for if you need to modify it or are running multiple projects then click Next.
    Leave this page set to Daily for now and click Next.
    Leave this page as defaults as well and click Next.
    Make sure Start a Program is selected and click Next.
    Browse to the batch file we just created and then click Next then click Finish.
    Now, select Task Scheduler Library on the left, and find your task in the middle pane and right-click and click Properties
    Go to the Triggers tab, click Daily in the list and click Edit.
    The drop-down at the top next to Begin the task change to At Log on for Any user
    Check the box that says Repeat Task Every and choose 5 Minutes from the drop-down. The drop-down after for a duration: on the same line choose Indefinitely.
    Click OK. Done.
    Then right-click on your task in the middle pane and click Run to initiate it.

    А задачи 1, 2 и т.д. будут выполняться синхронно или асинхронно?
    Задача 1 дожидается выполнения задачи 2?

    $schedule->command(’emails:send —force’)->->everyMinute(); //задача 1
    $schedule->command(‘phone:send —force’)->->everyMinute(); //задача 2
    foreach($drivers as $driver) <
    $schedule->command(‘driver:fire —driverId=’ . $driver->id)->->everyMinute(); //команда n+2
    >

    на крон выдет ошибку
    Undefined variable: boundary

    запускаю очистку кеша php artisan cache:clear

    [ErrorException]
    Undefined variable: boundary

    эта проблема решена — теперь
    Running scheduled command: Closure

    [Symfony\Component\Debug\Exception\FatalThrowableError]
    Class ‘App\Task’ not found

    Источник

    Оцените статью