Выполнение команд оболочки с command и shell
Выполняйте произвольные команды на удалённых узлах.
«Выполнение команд оболочки с command и shell» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Выполняйте настоящие команды удалённо
Иногда нужно просто выполнить необработанную команду на серверах. Ansible предлагает для этого два модуля: command и shell. 🖥️
Модуль command
Модуль command напрямую запускает программу на удалённом хосте. Это безопасный вариант по умолчанию для простых одиночных команд.
ansible all -m command -a "uptime"command не использует оболочку
Поскольку command работает без оболочки, он игнорирует конвейеры, перенаправления и переменные вроде $HOME. Благодаря этому его поведение предсказуемо и безопасно.
ansible all -m command -a "ls /etc"Модуль shell
Модуль shell выполняет вашу команду через настоящую оболочку на хосте, поэтому работают конвейеры, перенаправления и переменные.
ansible all -m shell -a "cat /etc/*release"Для конвейеров нужен shell
Если команда использует конвейер или перенаправление, выберите shell. Модуль command воспримет символ | просто как обычный аргумент.
ansible web -m shell -a "ps aux | grep nginx"Переменные окружения в shell
Только модуль shell раскрывает переменные. Используйте его, если команда зависит от значений вроде $HOME или $PATH.
ansible all -m shell -a "echo $HOME"По возможности выбирайте command
По умолчанию выбирайте command, а shell используйте только при необходимости в возможностях оболочки. Чем меньше оболочки, тем меньше неожиданностей.
Запускайте в каталоге с помощью chdir
Оба модуля принимают chdir, чтобы перед запуском перейти в каталог. Это аккуратнее, чем использовать cd внутри команды.
ansible app -m command -a "chdir=/srv git pull"Защитите повторные запуски с помощью creates
Параметр creates пропускает команду, если указанный файл уже существует. Это простой способ не выполнять работу повторно.
ansible app -m command -a "touch /tmp/done creates=/tmp/done"Они не идемпотентны
Оба модуля при каждом запуске сообщают changed, поскольку Ansible не может знать, что именно сделала ваша необработанная команда. Если есть подходящий настоящий модуль, используйте его.
Крайняя мера, а не первый выбор
Считайте shell и command запасными средствами. Если подходит специализированный модуль, например service или package, используйте его для более безопасного результата.
Быстрая проверка
Вам нужно выполнить команду, использующую конвейер. Какой модуль следует выбрать?
Итоги
Используйте command для обычных команд, а shell — когда нужны конвейеры или переменные. Помните: оба модуля всегда сообщают changed. 🖥️
Часто задаваемые вопросы
Урок «Выполнение команд оболочки с command и shell» бесплатный?
Да — полный текст урока «Выполнение команд оболочки с command и shell» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Выполнение команд оболочки с command и shell»?
Выполняйте произвольные команды на удалённых узлах. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Выполнение команд оболочки с command и shell»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Анатомия команды ansible
- Шаблоны: выбор всех узлов, web и host1
- Выполнение команд оболочки с command и shell
- Повышение привилегий с become