我的情况是我需要每天为我的php应用程序处理大量数据库数据。我的应用程序部署在azure上,它是一个webapp,基于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>
请指教。任何其他解决方案也会有所帮助
答案 0 :(得分:1)
由于您希望每天运行一次脚本,因此有一个非常简单的解决方案,请告诉我它是否不符合您的需求,还有其他的:)。
现在,作业将在您设置的每一天运行!告诉我解决方案是否能解决您的问题!
干杯,
麦克
答案 1 :(得分:1)
@mandrax的补充很少。
您不需要批处理文件,只需使用php文件作为您的WebJob,Azure就会运行它。
您可以使用this answer中描述的WebJob调度程序,基本上只需将一个名为settings.job
的文件添加到WebJob中,并将其作为cron表达式描述。
例如{"schedule": "0 0 0 * * *"}
每天午夜一次。
答案 2 :(得分:1)
我想让一个webjob使用CodeIgniter的MVC结构运行,但似乎没有人能在我找到的任何地方回答这个问题。经过数小时的搜索和测试,这就是答案。
您需要一个批处理文件来手动调用php.exe,其中CI的索引作为页面,控制器和方法作为参数。在这个例子中,我的控制器被称为&#34; cron&#34;我的方法是&#34; clean_uploads&#34;。如果您想在浏览器中手动访问它,请转到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();
}
希望能帮到别人!