我如何在 azure 中为 php 应用程序设置 webjob

How can i setup a webjob in azure for a php application

我的 php 应用程序需要每天处理一次大量数据库数据。我的应用程序部署在 Azure 上,它是一个 Web 应用程序,构建在 Codeigniter v3.x 上。我已经能够使用 .bat 文件和 .php 文件在本地 window 机器上 运行 制定计划。

这是我的批处理文件的内容

start D:\xampp\php\php.exe -f D:\xampp\htdocs\phpcode\cron.php

我能写这个是因为我知道 php 的确切路径。现在有一个简单的 php 文件 cron.php 可以完成这项工作。但是我打算写一个控制器 class 并从调度程序调用它的函数。

start <the path of php executable on azure> <call to something like 'http://www.example.com/controllername/functionname>

请指教。任何其他解决方案也会有所帮助

因为你想每天运行你的脚本一次,那里有一个很简单的解决方案,如果它不能满足你的需求请告诉我,还有其他的:)。

  1. 创建 2 个包含您的 php 和 bat 文件的 zip 文件(每个 zip 1 个文件)
  2. 转到旧的 Azure 门户 (https://manage.windowsazure.com)
  3. 转到您的网站,select 网络作业选项卡。
  4. 点击添加工作
  5. 上传您的 Zip 文件之一,然后在 "How to run" select 离子框中,select "run on schedule",按下一步
  6. 在下一个屏幕上 select "recurring job",并且每天重复一次。
  7. 使用其他脚本从第 4 点开始重复

作业现在 运行 每天都会在您设置的时间进行!告诉我解决方案是否解决了您的问题!

干杯,

麦克

@mandrax 回答的一些补充。

  • 您不需要批处理文件,只需使用 php 文件作为您的 WebJob,Azure 会 运行 它。

  • 您可以使用 中描述的 WebJob 计划程序,基本上您只需将一个名为 settings.job 的文件添加到您的 WebJob 并将那里的计划描述为 cron 表达式。

    例如{"schedule": "0 0 0 * * *"}每天午夜一次。

我想使用 CodeIgniter 的 MVC 结构创建一个 运行 的网络作业,但在我能找到的任何地方似乎都没有人回答这个问题。经过数小时的搜索和测试,这里是答案。

您需要一个批处理文件来手动调用php.exe,将CI的索引作为页面,并将控制器和方法作为参数。在此示例中,我的控制器名为 "cron",我的方法为 "clean_uploads"。如果您想在浏览器中手动访问它,请转到 http://yoursite.com/cron/clean_uploads

REM Set PHP location
SET php="D:\Program Files (x86)\PHP\v5.6\php.exe"

REM Set Index Location
SET index="D:\home\site\wwwroot\index.php"

REM Set Controller
SET controller="cron"

REM Set Method
SET method="clean_uploads"

REM Run Command
%php% %index% %controller% %method%

要找到 php.exe 和 index.php 的位置,您需要 运行 在 CI 控制器中执行以下操作:

$php_location   = exec("where php.exe");
$index_location = FCPATH . "index.php";

echo 'SET php="' . $php_location . '"' . "\n";
echo 'SET index="' . $index_location . '"' . "\n";

如果您想禁止通过浏览器访问您的控制器,请将以下内容添加到您的构造函数中:

    if (php_sapi_name() != "cli") {
        show_404();
    }

希望对其他人有所帮助!