2

Мы запускаем узловое приложение в Azure Virtual Machine, в то же время мы также хотим перезагрузить VM в определенное время с помощью Azure Automation (или через портал управления).Каков правильный способ запуска задачи запуска для Azure Virtual Machine

Но как мы можем перезапустить приложение-узел после перезапуска VM?

Мы пробовали много способов для достижения этой цели, в том числе добавить планировщик заданий, добавьте команду в раздел реестра (LocalMachine\..\Run), использовать пользовательские расширения сценариев для VM ...

Все вышеперечисленное не удалось. Мы хотим, чтобы после перезагрузки VM приложение узла можно было запустить автоматически. Если мы затем удалим VM с предопределенной учетной записью, некоторые из вышеперечисленных способов могут работать. Однако это не декорации, мы хотим только удалять только один раз в начале, а не каждый перезапуск.

Итак, каков правильный путь для этого, чтобы начать процесс или выполнить команду после автоматического перезапуска VM без ручного входа?

+0

Возможный дубликат [Auto start node.js server при загрузке] (http://stackoverflow.com/questions/20445599/auto-start-node-js-server-on-boot) –

+0

@BrunoFaria Хорошо, я буду попробуйте позже. Но поскольку это не является целью для Azure Virtual Machine, и я думаю, что моя проблема больше связана с Azure Windows VM. –

+0

Это похоже на работу для Windows Services. Вы посмотрели на этот проект? https://github.com/coreybutler/node-windows –

ответ

1

Я уже пробовал много способов достижения этой цели, и с моей точки зрения, Task Scheduler - лучший выбор для выполнения этой работы.

Ключевым моментом никогда не может быть Windows Command Prompt после запуска вашего процесса. Например, сначала мы используем 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 

Надеюсь, что эти два подхода могут вам помочь.

Смежные вопросы