Azure WebJob .bat文件立即终止

时间:2015-12-14 07:33:53

标签: azure azure-webjobs azure-webjobssdk

我有一个连续的WebJob,它包含一个使用WebJobs SDK编译的可执行文件(换句话说,在host.RunAndBlock()中运行Main()),并且有一个名为ProcessQueueMessage()的简单方法。 Functions课程。它完全是模板。

问题是我需要在包中包含一个额外的可执行文件,其文件名将按字母顺序排在主要可执行文件之前。我将编译为WebJob1.exe,但我需要在同一部署目录中有一个名为MyOtherExecutable.exe的东西。根据{{​​3}},这意味着MyOtherExecutable.exe赢得了WebJob的主要可执行文件;将调用 it 而不是WebJob1.exe。

我意识到有记录的方法可以解决这个问题。我可以手动更改文件名并强制我的WebJob编译为类似111.exe的名称,但这似乎是一个可怕的黑客。替代方案,我解释为首选和更优雅的方法,是包含一行.bat文件:start WebJob1.exe。不幸的是,当我这样做时,WebJob会立即启动并立即停止,如您所见:

[12/14/2015 07:05:55 > fed86c: SYS INFO] Run script 'run.bat' with script host - 'WindowsScriptHost'
[12/14/2015 07:05:55 > fed86c: SYS INFO] Status changed to Running
[12/14/2015 07:05:55 > fed86c: INFO] D:\local\Temp\jobs\continuous\WebJob1\irfufwim.i5t>start WebJob1.exe 
[12/14/2015 07:06:06 > fed86c: SYS INFO] Status changed to Success
[12/14/2015 07:06:07 > fed86c: SYS INFO] Process went down, waiting for 60 seconds
[12/14/2015 07:06:07 > fed86c: SYS INFO] Status changed to PendingRestart
(repeat)

这不是我期待的行为。我认为.bat文件将运行我的可执行文件(它永远不会从内部终止)并保持打开状态直到我手动结束它。

它也没有提供这个非常好的插件到WebJob中,当我对WebJob的部署目录排队并从WebJob的部署目录中删除所有令人分心的可执行文件/脚本时,我看到了这个插件:

[12/14/2015 07:18:22 > fed86c: SYS INFO] Status changed to Starting
[12/14/2015 07:18:25 > fed86c: SYS INFO] Run script 'WebJob1.exe' with script host - 'WindowsScriptHost'
[12/14/2015 07:18:25 > fed86c: SYS INFO] Status changed to Running
[12/14/2015 07:18:26 > fed86c: INFO] Found the following functions:
[12/14/2015 07:18:26 > fed86c: INFO] WebJob1.Functions.ProcessQueueMessage
[12/14/2015 07:18:26 > fed86c: INFO] Job host started

它列出了它发现的功能的部分向我表明,所有事情都应该按照它进行通信。看起来很正式。我担心即使我得到一个.bat文件工作,所以我可以清楚地指定我想要运行的可执行文件的名称,服务器将#34;停在那里"如果有意义的话,不要在我的函数中使用适当的钩子。我不知道托管机制是否足够聪明,知道他们已经从一个愚蠢的.bat文件反弹到真正的可执行文件。

我的主要问题的简短版本:如果start WebJob1.exe不是运行连续WebJobs SDK可执行文件的.bat文件的正确语法,那是什么?

2 个答案:

答案 0 :(得分:2)

start将启动一个单独的进程来调用该命令。除非设置了wait - 选项,否则父进程将继续执行。

我猜测在start WebJob1.exe之后,您的批处理脚本中没有任何内容阻止父进程完成,因此Web作业运行时将尝试重新启动连续作业。可以直接致电WebJob1.exe,也可以wait使用startstart /wait WebJob1.exe

Web作业运行时也将执行.exe个文件。除非您在批处理脚本中进行引导,否则完全删除它也是一种选择。

答案 1 :(得分:2)

删除“开始”并直接调用WebJob1.exe。我正在我的一个WebJobs中这样做,它可以工作,包括给我所有你正在寻找的控制台记录。

一个区别是我使用run.cmd而不是.bat文件,这是使用脚本文件覆盖exe的启动行为的推荐方法。但是,这应该在您的方案中没有任何区别 - .bat文件也可以。