Yii2-使用Scheduler在Windows上运行Console应用程序

问题描述 投票:2回答:2

我正在研究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";
}}

现在,为了测试它我遵循这个link并使用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打开并显示消息。

我该怎么做?任何帮助将受到高度赞赏。

php controller background yii2
2个回答
3
投票

您可以使用Windows的任务计划程序

  • 创建一个.bat文件,其中应包含运行Yii控制台应用程序controller/action的命令,如果您创建扩展TestController并添加yii\console\controller操作的控制器类create,从Yii控制台应用程序运行该操作,您将使用gitBash在项目根目录中键入./yii test/create或控制台,所以我们将这个命令添加到.bat文件,提供project_root/yii的完整路径,这是Yii控制台引导程序文件。这是作为Yii控制器动作代码的一部分运行作业的主要内容。

打开记事本并复制下面的代码并保存为qazxsw poi,名称为qazxsw poi

.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的完整路径

Steps to create a Task Scheduler

  • 在开始菜单中键入Task Scheduler并将其打开。
  • 创建一个基本任务

php.exe

  • 为任务写一个名字

.bat

  • 选择触发时间enter image description here

enter image description here

  • 选择执行任务的时间

Daily

  • 选择enter image description here开始一个程序

enter image description here

  • 现在选择Action文件,然后按Next和Finish

enter image description here

  • 现在转到任务管理器并选择my-cronjob.bat并右键单击刚刚创建的cronjob并打开属性。

enter image description here

  • 选择Task Scheduler Library enter image description here

注意:如果用户已登录,您可以选择运行cronjob,默认情况下,只有在用户登录后才能运行,您可以更改该选项。

现在,您可以通过右键单击并选择运行来手动运行任务,它将运行Run with highest privileges中指定的所需enter image description here或等待它在指定时间触发。

For running in the background

以上设置将打开命令提示符并运行任务,如果您希望调度程序最小化运行任务,您应该看到此controller/action并相应地更新任务设置。此外,您也可以将最后一行my-cronjob.bat更改为link

我在发布答案之前测试了它,因为我家里有pause操作系统,因此无法在办公室测试后发布答案。


1
投票

在我看来,你正在寻找一个Exit

您必须创建一个控制台cronjob,然后将其添加到服务器上的crontab。上面的链接有一个关于如何为Yii2设置的wiki。

每天下午3点运行的示例crontab:

Windows10
© www.soinside.com 2019 - 2024. All rights reserved.