2

我們正在Azure虛擬機中運行節點應用程序,同時我們還希望在Azure自動化(或通過管理門戶)的幫助下的特定時間重新啓動VM。運行Azure虛擬機啓動任務的正確方式

但是如何在虛擬機重啓後重啓節點應用?

我們嘗試了很多的方法來實現這一目標,包括添加任務計劃,命令添加到註冊表項(LocalMachine\..\Run),使用自定義腳本擴展爲虛擬機...

上述所有失敗。我們想要的是在VM重啓後,節點應用程序可以自動啓動。如果我們使用預定義帳戶遠程訪問虛擬機,上述方法中的一部分可以工作。但是,這不是風景,我們只想在開始時只遠程一次,不是每次重啓。

那麼,在沒有手動登錄的情況下VM自動重新啓動後啓動進程或執行命令的正確方法是什麼?

+0

[Auto start node.js server on boot]可能重複(http://stackoverflow.com/questions/20445599/auto-start-node-js-server-on-boot) –

+0

@BrunoFaria好的,我會稍後再試一試。但是,由於它不是Azure虛擬機的目標,我認爲我的問題更多與Azure Windows VM相關。 –

+0

這看起來像是Windows服務的工作。你看過這個項目嗎? https://github.com/coreybutler/node-windows –

回答

1

我已經嘗試了很多方法來實現這個目標,從我的角度來看,Task Scheduler是做這種工作的最佳選擇。

關鍵點是永遠不要讓Windows命令提示符在啓動進程後存在。例如,我們首先使用forever來啓動節點應用程序。由於forever命令很快返回,這意味着所有的命令執行完成。因此,Windows命令提示符進程將被終止並與節點進程一起。

我們所做的是,我們使用另一種方式永久啓動(forever-monitor),它在代碼中使用。通過這樣做,我們可以簡單地使用node命令來啓動這個永久啓動文件。由於node命令將阻止命令提示符,節點應用程序不會再被終止。


另一種方法是使用Azure Automation遠程運行啓動腳本。

完整的腳本,可以發現here,關鍵的一點是:

$PSCommandResult = Invoke-command -AsJob -ConnectionUri $Using:Uri.AbsoluteUri -credential $Using:mycreds -ScriptBlock { Invoke-Expression "D:\start.ps1" } 

start.ps1腳本,我們也不應該退出執行,我們可以用它Start-Sleep命令來實現這一目標。腳本可以是:

forever start --sourceDir D: start.js 
Start-Sleep -s 86400 

希望這兩種方法可以幫助你。

相關問題