За последние 24 часа нас посетили 22882 программиста и 1232 робота. Сейчас ищут 725 программистов ...

Планировщик заданий и часовой пояс

Тема в разделе "Laravel", создана пользователем lordconst, 3 май 2020.

  1. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    151
    Симпатии:
    1
    Создается тикет и в нем можно сделать дату, до которой тикет будет активен. Нашел в документации информацию про планировщик задач, сделал такой код в Kernel:
    PHP:
    1. protected function schedule(Schedule $schedule)
    2.     {
    3.         $schedule->call(function () {
    4.             $current_time = Carbon::now();
    5.             DB::table('tickets')
    6.                 ->where('date_off', '<', $current_time)
    7.                 ->update(['status' => 'closed']);
    8.         })->everyMinute();
    9.         // $schedule->command('inspire')->hourly();
    10.     }
    В конфиге timezone = 'UTC+3' поставил.
    Первая проблема: не работает обновление поля status по этому планировщику (см.скрин). Есть подозрение, что я не активировал, не запустил в работу планировщик. Как это сделать?
    Вторая проблема: см. второй скрин. Почему-то после того как в при выводе даты добавлю format, у меня меняется дата. Код:
    PHP:
    1. Создано {{ $ticket->created_at }} <br>
    2.                         @if($ticket->date_off != null)
    3.                             Активно до {{ $ticket->date_off->format('d.m h:m') }}
    4.                         @endif
    Почему меняется дата при форматировании даты и как пофиксить? Отдельно выводил Carbon::now() и у меня показывает текущее время компа.
     

    Вложения:

    #1 lordconst, 3 май 2020
    Последнее редактирование: 3 май 2020
  2. lordconst

    lordconst Новичок

    С нами с:
    7 дек 2019
    Сообщения:
    151
    Симпатии:
    1
    Запустил через консоль команду schedule:run и по истечении времени активности тикета, он действительно меняет статус на закрытый. Но я в документации прочитал, что надо добавить это в крон (см.скрин). А если у меня нет Laravel Forge? Где я могу вручную прописать выполнение крон, чтобы планировщик каждую минуту работал?
     

    Вложения:

  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Крон обычно просит команду для выполнения, ты её просто с консоли скопируй, но с полными путями, вместо cd до нужной папки, сразу пропиши путь к файлу который запускаешь
    --- Добавлено ---
    @lordconst на будущее совет, если что-то не работает или не понятно, то можно глянуть код framework который используешь, ещё reference api https://laravel.com/api/7.x/index.html
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Код (Text):
    1. crontab -e
    Если на винде - то у неё есть какой-то свой шедулер, но я не пользовался. На своей машине я обычно не пихаю ничего в крон

    Если шаред хостинг, то там обычно в панели где-нибудь есть крон-задачи.