【问题标题】:What's the right way to run startup task for Azure Virtual Machine为 Azure 虚拟机运行启动任务的正确方法是什么
【发布时间】:2015-08-14 22:49:12
【问题描述】:

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

但是VM重启后如何重启node应用呢?

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

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

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

【问题讨论】:

标签: powershell azure azure-virtual-machine startupscript azure-automation


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多