【问题标题】:Yii2- Run Console app on windows using SchedulerYii2- 使用调度程序在 Windows 上运行控制台应用程序
【发布时间】:2018-05-03 07:03:03
【问题描述】:

我正在处理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 和以下参数创建了一个运行服务

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

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

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

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

【问题讨论】:

  • 按照下面的答案创建一个 cronjob
  • @MuhammadOmerAslam 给定的链接适用于 linux,但我希望它适用于 windows。虽然我已经创建了一个测试 cronjob,但我仍然无法让它每分钟都运行。
  • 是您尝试设置 cron 的本地系统吗?
  • 是的,现在我使用的是本地系统
  • 一定要慢慢来,我以为你忘了:D

标签: php controller background yii2


【解决方案1】:

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

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

注意:确保您在Windows Path Variable 中有php,或者您应该在上述.bat 文件中提供php.exe 的完整路径

创建任务计划程序的步骤

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

  • 创建基本任务

  • 为任务写一个名字

  • 选择触发时间Daily

  • 选择执行任务的时间

  • 选择Action启动程序

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

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

  • 选择Run with highest privileges

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

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

用于在后台运行

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

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

【讨论】:

  • 谢谢你,兄弟。我一定会试一试的
  • 我必须先创建一个控制台应用程序,然后制作一个调用该控制台应用程序的 bat 文件??
  • 或者我只需要制作一个 bat 文件并调用我的控制器?
  • @MrFaisal 您的控制台应用程序是已经存在的文件夹控制台,您必须创建 bat 文件和控制台应用程序内的控制器,如上所述
  • 您的控制器应位于console/controllers 并从yii\console\Controller 扩展
【解决方案2】:

在我看来,您正在寻找cronjob

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

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

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

【讨论】:

  • 我按照tutorial 创建了一个示例crob job,但这里没有提到如何在一段时间后运行它。您提供的链接对创建工作非常有帮助,但它适用于 linux,我希望它适用于 Windows
  • 阅读 cronjobs。一个 cronjob 是专门为此设计的
  • 我已经阅读了 cronjob。它说在 Windows 上使用Task Scheduler。我尝试制作 cronjob 调度程序,但在控制台上没有看到任何输出
猜你喜欢
  • 2012-02-03
  • 2020-11-19
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多