Jer*_*ian 5 powershell startupscript azure azure-virtual-machine azure-automation
我们在 Azure 虚拟机中运行节点应用程序,同时我们也想在某个时间借助 Azure 自动化(或通过管理门户)重新启动 VM。
但是VM重启后如何重启node应用呢?
我们尝试了很多方法来实现这一点,包括添加任务计划程序、将命令添加到注册表项 ( LocalMachine\..\Run)、使用 VM 的自定义脚本扩展......
以上都失败了。我们想要的是在虚拟机重启后,节点应用程序可以自动启动。如果我们然后使用预定义的帐户远程访问 VM,则上述一些方法可以工作。然而,这不是风景,我们只想在一开始就远程一次,而不是每次重启。
那么,实现此目的的正确方法是在VM自动重启后启动进程或执行命令而无需手动登录?
我已经尝试了很多方法来实现这个目标,从我的角度来看,任务计划程序是完成此类工作的最佳选择。
关键点是启动进程后永远不要让 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" }
Run Code Online (Sandbox Code Playgroud)
在start.ps1脚本中,我们也不应该退出执行,我们可以使用Start-Sleep命令来实现这一点。该脚本可以是:
forever start --sourceDir D: start.js
Start-Sleep -s 86400
Run Code Online (Sandbox Code Playgroud)
希望这两种方法可以帮助到您。
| 归档时间: |
|
| 查看次数: |
4448 次 |
| 最近记录: |