Azure WebJob .bat 文件立即终止
Azure WebJob .bat file terminates immediately
我有一个连续的 WebJob,它由使用 WebJobs SDK 编译的可执行文件组成(换句话说,运行s host.RunAndBlock()
in Main()
)并且有一个简单的方法名为ProcessQueueMessage()
在 Functions
class。这完全是样板文件。
问题是我需要在包中包含一个额外的可执行文件,它的文件名将按字母顺序排在主要可执行文件的前面。我将编译为 WebJob1.exe,但我需要在同一个部署目录中有一个名为 MyOtherExecutable.exe 的东西。根据 WebJobs documentation,这意味着 MyOtherExecutable.exe 成为 WebJob 的主要可执行文件; 它 将被调用而不是 WebJob1.exe。
我知道有记录的方法可以解决这个问题。我可以手动更改文件名并强制我的 WebJob 编译为 111.exe 之类的名称,但这似乎是一个糟糕的 hack。另一种方法,我认为是首选且更优雅的方法,是包含一个包含一行的 .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 的部署目录中删除了所有分散注意力的东西时看到的 executables/scripts:
[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 文件工作以便我可以清楚地指定我想要 运行 的可执行文件的名称,服务器也会 "stop there" 而不会进行适当的挂钩进入我的功能,如果这有意义的话。我不知道托管机制是否足够智能,可以知道它们已经从愚蠢的 .bat 文件跳转到真正的可执行文件。
我的主要问题的简短版本: 如果 start WebJob1.exe
不是应该 运行 连续 WebJobs SDK 可执行文件的 .bat 文件的正确语法, 是什么?
start
将启动一个单独的进程来调用该命令。父进程将继续执行,除非设置了 wait
-选项。
我猜在 start WebJob1.exe
之后您的批处理脚本中没有任何东西阻止父进程完成,因此 Web 作业运行时将尝试重新启动连续作业。直接调用 WebJob1.exe
或使用带有 start
的 wait
选项,即 start /wait WebJob1.exe
.
Web 作业运行时还将执行 .exe
个文件。除非您在批处理脚本中进行引导,否则完全删除它也是一种选择。
删除 "start" 并直接调用 WebJob1.exe。我正在我的一个 WebJobs 中这样做并且它有效,包括为我提供您正在寻找的所有控制台日志记录。
一个区别是我使用 run.cmd
而不是 .bat 文件,这是使用脚本文件覆盖 exe 启动行为的推荐方式。然而,这对您的场景应该没有什么影响 - .bat 文件也可以工作。