我们正在Azure虚拟机中运行节点应用程序,同时我们还希望在Azure自动化(或通过管理门户)的帮助下在某个特定时间重新启动VM。
但是,如何在VM重启后重启节点应用程序?
我们尝试了很多方法来实现这一点,包括添加任务计划程序,向注册表项添加命令(LocalMachine\..\Run
),为VM使用自定义脚本扩展...
以上都失败了。我们想要的是在VM重启后,节点应用程序可以自动启动。如果我们使用预定义帐户远程访问VM,则上述某些方法可以正常工作。但是,这不是风景,我们只想在开始时只进行一次远程,而不是每次重启。
那么,在没有手动登录的情况下VM自动重启后启动流程或执行命令的正确方法是什么?
答案 0 :(得分: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
希望这两种方法可以帮到你。