5

我们在 Azure 虚拟机中运行节点应用程序,同时我们还希望在 Azure 自动化(或通过管理门户)的帮助下在某个时间重新启动 VM。

但是我们如何在VM重启后重启节点应用程序呢?

我们尝试了很多方法来实现这一点,包括添加任务计划程序、将命令添加到注册表项 ( LocalMachine\..\Run)、使用 VM 的自定义脚本扩展...

以上都失败了。我们想要的是在VM重启后,节点应用程序可以自动启动。如果我们然后使用预定义的帐户远程到 VM,则上述一些方法可以工作。然而,这不是风景,我们只想在开始时只远程一次,而不是每次重启。

那么,实现这一点的正确方法是在VM自动重启后启动进程或执行命令而无需手动登录?

4

1 回答 1

3

我已经尝试了很多方法来实现这个目标,从我的角度来看,Task Scheduler是完成这种工作的最佳选择。

关键是在启动进程后永远不要让 Windows 命令提示符存在。例如,一开始我们使用forever来启动节点应用程序。由于forever命令返回很快,这意味着所有命令执行完毕。因此,Windows 命令提示符进程将与节点进程一起被杀死。

我们所做的是,我们使用另一种方式永远启动(forever-monitor),它在代码中使用。通过这样做,我们可以简单地使用node命令来启动这个永远的启动文件。由于该node命令将阻止命令提示符,因此节点应用程序将不再被杀死。


另一种方法是使用Azure 自动化远程运行启动脚本。

完整的脚本可以在这里找到,关键是:

$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

希望这两种方法可以帮助你。

于 2015-06-04T08:02:09.190 回答