Azure 连续WebJob自动停止

Azure 连续WebJob自动停止,azure,azure-webjobs,azure-webjobssdk,Azure,Azure Webjobs,Azure Webjobssdk,我有一个与网站相关联的Webjob,它被配置为连续运行,它所做的只是监视消息队列并对其进行处理 我的网站处于共享模式,目前几乎没有任何流量,因此我设置了虚拟服务,每1分钟请求一次主页,以防止网站被关闭,这是测试的一部分,我可以注意到网站本身没有关闭。但是,除非我转到Azure管理门户并查找webjob状态,否则此webjob将在大约一小时后关闭。当我去那里的时候,它又启动了,然后在几分钟到一个小时后关闭 此webjob的日志文件显示如下内容: [02/13/2015 09:19:45 >

我有一个与网站相关联的Webjob,它被配置为连续运行,它所做的只是监视消息队列并对其进行处理

我的网站处于共享模式,目前几乎没有任何流量,因此我设置了虚拟服务,每1分钟请求一次主页,以防止网站被关闭,这是测试的一部分,我可以注意到网站本身没有关闭。但是,除非我转到Azure管理门户并查找webjob状态,否则此webjob将在大约一小时后关闭。当我去那里的时候,它又启动了,然后在几分钟到一个小时后关闭

此webjob的日志文件显示如下内容:

[02/13/2015 09:19:45 > 4660f6: INFO] Job host started
[02/13/2015 10:19:41 > 4660f6: SYS INFO] WebJob is still running
[02/13/2015 10:20:35 > 4660f6: SYS INFO] WebJob is stopping due to website shutting down
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopping
[02/13/2015 10:20:35 > 4660f6: INFO] Job host stopped
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Success
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopped
public static void WriteLogPOCO([QueueTrigger("logqueue")] BlobInformation blobInfo, TextWriter logger)
{
    logger.WriteLine("Queue message refers to blob: " + blobInfo.BlobName);
}
我可以看到我的网站仍在运行并返回主页,但作业本身已停止

现在,当我登录到管理门户以查找状态时,我可以在日志中看到:

[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Success
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopped
[02/13/2015 14:56:15 > 4660f6: SYS INFO] Status changed to Starting
[02/13/2015 14:56:17 > 4660f6: SYS INFO] Run script 'WebJobs.exe' with script host - 'WindowsScriptHost'
[02/13/2015 14:56:17 > 4660f6: SYS INFO] Status changed to Running
[02/13/2015 14:56:19 > 4660f6: INFO] Found the following functions:
[02/13/2015 14:56:19 > 4660f6: INFO] WebJobs.NotificationsProgram.ProcessQueueMessage
[02/13/2015 14:56:19 > 4660f6: INFO] WebJobs.NotificationsProgram.PublishNotification
[02/13/2015 14:56:19 > 4660f6: INFO] WebJobs.NotificationsProgram.ProcessMessages
[02/13/2015 14:56:19 > 4660f6: INFO] Job host started
关于如何确保只要网站处于活动状态,Webjob就处于活动状态,有什么想法吗?或者至少让网站在返回运行状态时也启动webjob

更新1

我的webjob本身非常简单,如下所示:

static void Main(string[] args)
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}
触发函数看起来很像这样:

[02/13/2015 09:19:45 > 4660f6: INFO] Job host started
[02/13/2015 10:19:41 > 4660f6: SYS INFO] WebJob is still running
[02/13/2015 10:20:35 > 4660f6: SYS INFO] WebJob is stopping due to website shutting down
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopping
[02/13/2015 10:20:35 > 4660f6: INFO] Job host stopped
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Success
[02/13/2015 10:20:35 > 4660f6: SYS INFO] Status changed to Stopped
public static void WriteLogPOCO([QueueTrigger("logqueue")] BlobInformation blobInfo, TextWriter logger)
{
    logger.WriteLine("Queue message refers to blob: " + blobInfo.BlobName);
}
在这里,我是否需要做一些事情来表明这项工作应该遵循网站的生命周期,即每次网站启动时都要启动

更新2

我试图查看Process Explorer,当WebJobs停止时,我看到了以下三种情况之一。我不知道如何在不访问管理门户的情况下查看作业日志,因此不知道此时的实际日志

但我确信作业没有运行,因为在我转到管理门户之前,它不会处理队列中的任何消息

pingdom结果如下所示,表明网站本身正在运行,没有中断:

问候
Kiran

Web作业停止,因为网站正在关闭。在日志中有以下行:

[02/13/2015 10:20:35 > 4660f6: SYS INFO] WebJob is stopping due to website shutting down

如果您要像现在这样在共享模式下运行,那么这种行为是可以预料的。如果您有一个持续运行的webjob,建议您启用始终启用。然而,这是基本和标准的一个特性,所以您需要改变您的模式或重新考虑您的解决方案

此外,请注意这些注释


我原以为工作会在网站恢复时开始,不是吗?文档表明工作会遵循网站本身的生命周期,那么,为什么我必须切换到“始终打开”?以保持网站运行,从而防止webjob停止。当网站本身启动时,如何启动此门户上的所有webjob。。这可能吗?更新“免费”网站。我不知道它是否也适用于“共享”网站。“截至2014年3月,如果没有对scm(部署)网站的请求,并且网站的门户未在Azure中打开,则处于免费模式的网站可能会在20分钟后超时。对实际网站的请求不会重置此设置。”来源:@FabrizioAccatino:我找到了解决问题的方法,可能也会对您有所帮助。要求是确保我们有一个对scm站点的调用,并且作业开始运行。因此,在我的代码中,当我向队列发布消息时,我使用部署凭据显式调用scm站点,它启动我的作业。Andrzej Turski在这里用他的代码帮助我-