PHP Azure WebJob - 使用退出代码255失败(但在Kudu上工作正常)

时间:2017-07-26 10:36:57

标签: php azure scripting azure-web-sites azure-webjobs

我开发了一个PHP脚本,它生成一个简单的财务报告并通过SMTP发送(使用PHPMailer库)。

我正在尝试使用Azure Web Jobs托管和执行脚本,但遗憾的是每次运行时作业都会失败。

WebJob位于Azure上的from rest_framework.parsers import JSONParser class MyUserViewSet(viewsets.ModelViewSet): queryset = get_user_model().objects.all() serializer_class = UserSerializer parser_classes = (JSONParser,)

脚本的内容如下;可以看出,该脚本导入了许多其他脚本:

wwwroot\App_Data\jobs\triggered\send-sales-report\send_sales_report.php

另外,上述文件的目录结构如下:

<?php

    try 
    {

        include "./../../../../inc/class.EmailMessage.inc";
        include "./../../../../E-Mail.php";

        $message = new EmailMessage('sales_report', array());
        SendOrderEmail('Sales Report', $message->render(), 'name@emailprovider.com', 'Recipient Name');

    } 
    catch (Exception $e) 
    {

        echo 'Caught exception: ',  $e->getMessage(), "\n";

    }

?>

当我使用Azure门户运行PHP WebJob时(手动和按计划),它失败,退出代码为255;但是,当我在Azure上使用Kudu控制台执行脚本时,它的工作正常。另外,我还在本地复制了运行环境,它运行正常。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我建议您为您的应用启用PHP错误日志。创建 .user.ini 文件并将以下内容添加到其中:

  

log_errors = on

请参阅此博文:Enable PHP error logging

PHP错误日志的默认位置为: D:\home\LogFiles\php_errors.log

这应该有助于进一步推进。

答案 1 :(得分:1)

255是一个错误。见PHP exit status 255: what does it mean?。因此,您可能会在PHP脚本中遇到致命错误。

可以通过using register_shutdown_function function捕获致命错误。以下代码示例可用于记录发生时的致命错误。

<?php

register_shutdown_function('shutdown_function');  

try 
{

    include "./../../../../inc/class.EmailMessage.inc";
    include "./../../../../E-Mail.php";

    $message = new EmailMessage('sales_report', array());
    SendOrderEmail('Sales Report', $message->render(), 'name@emailprovider.com', 'Recipient Name');

} 
catch (Exception $e) 
{

    echo 'Caught exception: ',  $e->getMessage(), "\n";

}

function shutdown_function()  
{
    $e = error_get_last();
    print_r($e);
}