繁体   English   中英

我如何在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>

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

由于您想每天运行一次脚本,因此这里有一个简单的解决方案,请告诉我它是否不能满足您的需求,还有其他:)。

  1. 创建2个包含php和bat文件的zip文件(每个zip 1个文件)
  2. 转到旧的Azure门户( https://manage.windowsazure.com
  3. 转到您的网站,选择“ webjob”选项卡。
  4. 按下添加工作
  5. 上传您的一个Zip文件,然后在“如何运行”选择框中选择“按计划运行”,然后按下一步
  6. 在下一个屏幕上,选择“周期性工作”,然后每天重复一次。
  7. 从第4点开始使用其他脚本重复

现在,该作业将在您设置的时间每天运行! 告诉我解决方案是否可以解决您的问题!

干杯,

麦克风

@mandrax答案的补充很少。

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

  • 您可以使用此答案中描述的WebJob调度程序,基本上,您只需在WebJob中添加一个名为settings.job的文件,并将该时间表描述为cron表达式即可。

    例如{"schedule": "0 0 0 * * *"}每天凌晨12点一次。

我想让一个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();
    }

希望对别人有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM