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


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

我有一个情况,我需要处理大量的数据库数据,每天一次为我的php应用程序。我的应用程序部署在azure上,它是一个web应用程序,建立在codeigniter v3.x上。我已经能够使用。bat文件和。php文件在我的本地窗口机器上运行一个时间表。

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

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

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

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

请建议。其他的解决方案也会有帮助

对@mandrax答案的一些补充

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

  • 你可以使用这个答案中描述的WebJob调度器,基本上你只需要添加一个名为settings.job的文件到你的WebJob,并将调度描述为一个cron表达式。

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

我想有一个webjob运行使用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();
    }

希望这对其他人有所帮助!

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

  1. 创建包含php和bat文件的2个zip文件(每个zip文件1个)
  2. 转到旧的Azure门户(https://manage.windowsazure.com)
  3. 进入你的网站,选择webjob选项卡。
  4. 按添加作业
  5. 上传一个Zip文件,在"如何运行"选择框中选择"按计划运行",按下一步
  6. 在下一个屏幕上选择"循环作业",每天循环一次。
  7. 用其他脚本重复第4点

作业现在将每天在您设置的时间运行!告诉我这个解决方案是否解决了你的问题!

欢呼,迈克