Yii2 - Запустите консольное приложение на окнах с помощью планировщика - PullRequest
0 голосов
/ 03 мая 2018

Я работаю над yii2. У меня есть функция создания, которую я хочу запускать в фоновом режиме через каждые 24 часа.

 public function actionCreate()
{
    $model = new MeterPing();

    // CURL code to get results from web-api

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

Также в этой функции я буду извлекать некоторые записи из web-API. Но моя главная задача - запускать вышеуказанную функцию в фоновом режиме через каждые 24 часа.

Обновление 1

Согласно предложению, я создал контроллер в console\controller

namespace console\controllers;

use yii\console\Controller;

class TestController extends Controller {

public function actionIndex() {
    echo "cron service runnning";
}}

Теперь, для его тестирования, я перешел по этой ссылке и создал службу запуска, используя cmd со следующими параметрами

enter image description here

Теперь, следуя рекомендациям, я попробовал каждый шаг. Файл .bat содержит

@Echo off
title My Cron Job
:: See title at the top
php E:\xampp\htdocs\inventory-web\yii test
pause

После сохранения файла и добавления его в планировщик задач. Я пытался запустить его из этого интерфейса. И я увидел, что cmd открывается и показывает сообщение.

Как я могу это сделать? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете использовать планировщик заданий для Windows

  • Создайте файл .bat, который должен содержать команду для запуска консольного приложения Yii controller/action, если вы создаете класс контроллера TestController, который расширяет yii\console\controller и добавляет действие create, чтобы запустить это действие из В консольном приложении Yii вы должны набрать ./yii test/create в корневом каталоге проекта, используя gitBash или console, поэтому мы добавим эту команду в файл .bat, указав полный путь к project_root/yii, который является файлом начальной загрузки консоли Yii. Это главное, чтобы запустить задание как часть кода действия контроллера Yii.

открыть блокнот и скопировать в него код, сохраненный как .bat с именем my-cronjob.bat

@Echo off
title My Cron Job
:: See title at the top
php F:\xampp\htdocs\my-project\yii test/create
pause

ПРИМЕЧАНИЕ: убедитесь, что у вас есть php в Windows Path Variable или вы должны указать полный путь к php.exe в указанном выше .bat файле

Шаги по созданию планировщика задач

  • Введите планировщик заданий в меню «Пуск» и откройте его.

  • Создание базовой задачи

enter image description here

  • Напишите название для задачи

enter image description here

  • Выбрать время запуска Daily

enter image description here

  • Выберите время для выполнения задачи

enter image description here

  • Выбрать Action Запустить программу

enter image description here

  • Теперь выберите файл my-cronjob.bat и нажмите Далее и Готово

enter image description here

  • Теперь перейдите в диспетчер задач и выберите Task Scheduler Library и щелкните правой кнопкой мыши на только что созданном cronjob и откройте свойства.

enter image description here

  • Выбрать Run with highest privileges enter image description here

ПРИМЕЧАНИЕ: вы можете выбрать запуск cronjob, если пользователь вошел в систему или нет, по умолчанию он запускается, только если пользователь вошел в систему, вы можете изменить эту опцию.

То есть теперь вы можете либо запустить задачу вручную, щелкнув правой кнопкой мыши и выбрав команду run, и она запустит требуемый controller/action, указанный в my-cronjob.bat, либо дождаться его запуска в указанное время.

Для работы в фоновом режиме

Приведенные выше настройки откроют командную строку и запустят задачу, если вы хотите, чтобы планировщик выполнил задачу минимизировано, вы должны увидеть это link и соответствующим образом обновить параметры задачи , Также вы можете изменить последнюю строку pause на Exit тоже.

Я проверил его, прежде чем публиковать ответ здесь, поскольку у меня есть Windows10 ОС у меня дома, поэтому я не смог опубликовать ответ без тестирования из офиса.

0 голосов
/ 03 мая 2018

Мне кажется, что вы ищете cronjob .

Вам нужно будет создать консольный cronjob и затем добавить его в ваш crontab на сервере. Приведенная выше ссылка содержит вики о том, как настроить это для Yii2.

Пример crontab, который будет запускаться каждый день в 15:00:

0 15 * * * /var/www/project/yii daemon/create
...