1

我正在努力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并使用以下参数创建了一个运行服务

在此处输入图像描述

现在,按照建议,我已经尝试了每一步。该.bat文件包含

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

保存文件并将其添加到任务计划程序后。我试图从这个界面运行它。我确实看到一个 cmd 打开并显示消息。

我该怎么做?任何帮助将不胜感激。

4

2 回答 2

3

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

  • 创建一个.bat包含运行 Yii 控制台应用程序的命令的文件,controller/action如果您创建一个TestController扩展yii\console\controller并添加create操作的控制器类,要从 Yii 控制台应用程序运行该操作,您将./yii test/create使用 gitBash 或控制台在项目根目录上键入,所以我们将.bat通过提供project_root/yiiYii 控制台引导文件的完整路径,将此命令添加到文件中。这是作为 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

注意:确保您已经phpWindows Path Variable或者您应该php.exe在上面的.bat文件中提供完整的路径

创建任务计划程序的步骤

  • 在开始菜单中输入任务计划程序并打开它。

  • 创建基本任务

在此处输入图像描述

  • 为任务写一个名字

在此处输入图像描述

  • 选择触发时间Daily

在此处输入图像描述

  • 选择执行任务的时间

在此处输入图像描述

  • 选择Action启动程序

在此处输入图像描述

  • 现在选择my-cronjob.bat文件并按下一步和完成

在此处输入图像描述

  • 现在转到任务管理器并选择Task Scheduler Library并右键单击您刚刚创建的 cronjob 并打开属性。

在此处输入图像描述

  • 选择Run with highest privileges 在此处输入图像描述

注意:如果用户登录或未登录,您可以选择运行 cronjob,默认情况下,它仅在用户登录时运行,您可以更改该选项。

就是这样,您现在可以通过右键单击并选择运行来手动运行任务,它将运行controller/action指定的所需任务my-cronjob.bat或等待它在指定时间触发。

用于在后台运行

如果您希望调度程序最小化运行任务,上述设置将打开命令提示符并运行任务,您应该看到这一点link并相应地更新任务设置。此外,您也可以将最后一行更改pauseExit

我已经在此处发布答案之前对其进行了测试,因为Windows10我家里有操作系统,所以如果没有办公室测试就无法发布答案。

于 2018-05-03T20:03:20.880 回答
1

在我看来,您正在寻找cronjob

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

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

0 15 * * * /var/www/project/yii daemon/create
于 2018-05-03T07:20:50.077 回答