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

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

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

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

Льготы

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

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

Необходимые компоненты

Поддерживаемые дистрибутивы Linux

Дистрибутив Linux x64 ARM64
AlmaLinux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Не поддерживается
Oracle Linux 6.4+, 7.x+, 8.x+ Не поддерживается
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+ 8.6+, 9.0+
Rocky Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x SP4+
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

Ограничения

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

  • Выводятся только последние 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
Имя Description
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/runCommands/write. Это разрешение имеется у роли Участник виртуальной машины и более высоких уровней.

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

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

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

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

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

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

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

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

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

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

Примечание.

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

Следующие шаги

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