Выполнение скриптов в виртуальной машине Linux с помощью функции "Выполнение команд"

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

Функция выполнения команд использует агент виртуальной машины для выполнения скриптов PowerShell на виртуальной машине Azure Linux. Эти сценарии можно использовать для общего управления компьютерами или приложениями. Они могут помочь вам быстро диагностировать и исправлять проблемы доступа к виртуальной машине и сети, а также восстановить работоспособность виртуальной машины.

Преимущества

Доступ к виртуальным машинам можно получить несколькими способами. Выполнение команд может удаленно реализовывать скрипты на виртуальных машинах с помощью их агента. Выполнение команд можно использовать на портале Microsoft Azure, в REST API или в Azure CLI для виртуальных машин Linux.

Эта возможность полезна во всех сценариях, где требуется выполнить скрипт на виртуальной машине. Это один из способов устранения неполадок и исправления виртуальной машины, на которой не открыт порт RDP или SSH из-за настройки сети или пользователя с правами администратора.

Ограничения

При использовании выполнения команд следует принимать во внимание перечисленные ниже ограничения.

  • Выводятся только последние 4096 байт.
  • Минимальное время выполнения скрипта составляет около 20 секунд.
  • По умолчанию в Linux скрипты выполняются от имени привилегированного пользователя.
  • Два скрипта не могут выполняться одновременно.
  • Скрипты, запрашивающие сведения (интерактивный режим), не поддерживаются.
  • Вы не можете отменить выполнение скрипта.
  • Максимальное время выполнения скрипта составляет 90 минут. После этого время ожидания скрипта истекает.
  • Чтобы вернуть результаты скрипта, требуется разрешить исходящие подключения из виртуальной машины.

Примечание

Чтобы выполнение команд работало правильно, требуется подключение (через порт 443) к общедоступным IP-адресам Azure. Если расширение не имеет доступа к этим конечным точкам, скрипты могут успешно выполняться, но результаты не будут возвращаться. Если вы блокируете трафик на виртуальной машине, вы можете использовать теги служб, чтобы разрешить трафик к общедоступным IP-адресам Azure с помощью тега AzureCloud.

Доступные команды

В этой таблице представлен список команд, доступных для виртуальных машин Linux. Команду RunShellScript можно использовать для выполнения любых пользовательских скриптов. При использовании Azure CLI или PowerShell для выполнения команды значение, указанное для параметра --command-id или -CommandId, должно быть одним из приведенных ниже значений. При указании значения, которое не является доступной командой, возникает следующая ошибка:

The entity was not found in this Azure location
имя; Описание
RunShellScript Выполняет скрипт оболочки Linux.
ifconfig Получает конфигурации всех сетевых интерфейсов.

Azure CLI

Ниже приведен пример с использованием команды az vm run-command для запуска скрипта оболочки на виртуальной машине Azure Linux.

az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"

Примечание

Для выполнения команд от имени другого пользователя введите sudo -u, чтобы указать нужную учетную запись.

Портал Azure

Перейдите к виртуальной машине на портале Azure и выберите Выполнить команду в меню слева под пунктом Операции. Появится список доступных команд, выполняемых на виртуальной машине.

Список команд

Выберите команду для запуска. Некоторые команды могут иметь необязательные или обязательные входные параметры. Параметры для этих команд представлены в виде текстовых полей для ввода входных значений. В каждой команде можно развернуть Просмотреть скрипт, чтобы просмотреть выполняемый скрипт. Команда RunShellScript отличается от других команд тем, что она позволяет запускать пользовательские скрипты.

Примечание

Встроенные команды не редактируются.

Выбрав команду, выберите Выполнить, чтобы запустить скрипт. Скрипт выполняется и по завершении выдает результаты и возможные ошибки в окне вывода. На следующем снимке экрана показан пример вывода команды запуска ifconfig.

Вывод сценария команды запуска

PowerShell

Ниже приведен пример с использованием командлета Invoke-AzVMRunCommand для выполнения скрипта PowerShell на виртуальной машине Azure. Этот командлет ожидает, что скрипт, указанный в параметре -ScriptPath, расположен в локальной среде, в которой выполняется командлет.

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

Ограничение доступа к команде запуска

Для перечисления команд выполнения или отображения сведений о команде требуется Microsoft.Compute/locations/runCommands/read разрешение на уровне подписки. Это разрешение имеется у встроенной роли Читатель и более высоких уровней.

Для выполнения команды требуется разрешение Microsoft.Compute/virtualMachines/runCommand/action. Это разрешение имеется у роли Участник виртуальной машины и более высоких уровней.

Можно использовать одну из встроенных ролей или создать пользовательскую роль для использования функции выполнения команд.

Устранение неполадок с командой выполнения действий в Linux

При устранении неполадок с командой выполнения действия для сред Linux обратитесь к файлу журнала обработчика , который обычно находится в следующем каталоге: /var/log/azure/run-command/handler.log для получения дополнительных сведений.

Известные проблемы

Журналы команд выполнения действий Linux имеют несколько заметных отличий по сравнению с журналами Windows команды выполнения действия.

  • Порядковый номер отображается с каждой строкой журнала как seq=#.
  • Не будет строки, содержащей , Awaiting completion... так как это будет в действии выполнять только команду Windows.
  • Строка Command existed with code: # также присутствует только в ведении журнала команды Windows.

Удаление команды выполнения действия

Если необходимо удалить расширение команды выполнения действия в Linux, выполните следующие действия для Azure PowerShell и CLI:

Замените rgname и vmname соответствующим именем группы ресурсов и именем виртуальной машины в следующих примерах удаления.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandLinuxExtension'
az vm run-command invoke  --command-id RemoveRunCommandLinuxExtension --name vmname -g rgname

Примечание

При повторном применении команды "Выполнить" расширение устанавливается автоматически. Вы можете использовать команду удаления расширения для устранения любых проблем, связанных с расширением.

Дальнейшие действия

Сведения о других способах для удаленного запуска скриптов и команд на виртуальной машине см. в разделе Выполнение скриптов в виртуальных машинах Linux.