2015-12-14 100 views
1

我有由使用WebJobs SDK編譯的可執行的連續WebJob(換句話說,運行在Main()host.RunAndBlock()),並且具有在Functions類命名ProcessQueueMessage()一個簡單的方法。這完全是樣板。天青WebJob bat文件立即終止

問題是我需要在包中包含一個額外的可執行文件,其文件名將按字母順序排列在主可執行文件之前。我將編譯爲WebJob1.exe,但我需要在同一個部署目錄中具有名爲MyOtherExecutable.exe的內容。根據WebJobs documentation,這意味着MyOtherExecutable.exe將成爲WebJob的主要可執行文件; 它將被調用,而不是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的部署目錄的腳本:

[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文件工作,以便我可以清楚地指定要運行的可執行文件的名稱,但服務器將「停在那裏」,並且不會將適當的鉤子放入我的函數中,如果這就說得通了。我不知道宿主機制是否足夠聰明,知道他們已經從一個愚蠢的.bat文件反彈到真正的可執行文件。

短版我的主要問題:如果start WebJob1.exe是不是應該運行連續WebJobs SDK可執行.bat文件正確的語法是什麼?

回答

2

刪除「開始」,直接調用WebJob1.exe。我在我的一個WebJobs中這樣做,它可以工作,包括給我所有你正在尋找的控制檯日誌。

一個區別是我使用run.cmd而不是a。bat文件,這是使用腳本文件覆蓋exe的啓動行爲的推薦方式。但是,這應該真的沒有什麼區別 - .bat文件也可以。

2

start將啓動一個單獨的進程來調用該命令。除非設置了wait選項,否則父進程將繼續執行。

我猜測start WebJob1.exe阻止父進程完成後批處理腳本中沒有任何內容,因此Web作業運行時將嘗試重新啓動連續作業。要麼直接撥打WebJob1.exe,要麼使用wait選項和start,即start /wait WebJob1.exe

Web作業運行時還將執行.exe -files。除非您在批處理腳本中進行引導,否則完全刪除它也是一種選擇。