NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
RU

Команды Linux и навыки работы с оболочкой

Python для серверных сценариев: где заканчивается Bash

Python появляется в тот момент, когда у bash-скрипта растут руки: полезные данные JSON, вызовы REST, повторные попытки с отсрочкой и анализ, который не должен находиться в регулярном выражении. Это не замена bash; это следующая ступенька, место, где одно умное регулярное выражение должно признать, что ему нужны реальные структуры данных и обработка ошибок. Серверный Python — это его собственная компетенция: дистрибутивы выводят версии интерпретатора, pip теперь отказывается от установки системы (PEP 668), а импортируемые вами пакеты — это поверхность атаки вашей автоматизации.

Главное

  1. Разговаривайте с ОС на правильных условиях: subprocess.run([...], check=True, capture_output=True) — безопасная оболочка; Shell=True и os.system — это путь внедрения, который используется, когда имена файлов или пользовательские данные встраиваются в строку.
  2. Сериализация — это преимущество Python для операций: json.load для конфигураций и API, yaml.safe_load (никогда не загружать просто) для инфраструктурных форматов, модуль csv для электронных таблиц; анализ структурированных форматов с помощью регулярных выражений — это ошибка, за которую вы заплатили один раз.
  3. Зависимости остаются на своих местах: python3 -m venv (или pip install --user) для каждого инструмента, закрепленный файл require.txt и отказ pip от «внешне управляемой среды» в современных дистрибутивах рассматривается как ограждение, а не препятствие.
  4. Инструменты на стороне SSH достаточно развиты, чтобы их можно было использовать: удаленные проверки Paramiko или Fabric Drive и параллельные задания инвентаризации, в которых цикл ssh в bash никогда не компонуется правильно; повторно используйте те же ключи, которым уже доверяет ssh.
  5. Операции ведения журнала печатаются быстро: модуль журналирования с ротацией дает невидимым для cron сценариям место, которое можно увидеть, а последовательный формат строк журнала («что выполнялось, что изменилось, что не удалось») — это то, что на самом деле читает дежурный.
  6. Идемпотентность исходит из данных, а не из бравады: моделируйте желаемое состояние как диктовки, сравнивайте текущее и желаемое, действуйте только на дельту; именно этот шаблон делает скрипт безопасным для двукратного запуска.
  7. Скрипты получают CI, как и любой код: функции синтаксического анализа модульного теста и пути отказа, анализ с ершом и обработка 400-строчной функции main() как инцидент, ожидающий опечатки; запасным вариантом является пейджерная работа, а не рефакторинг.
  8. Реальность версий на серверах: установленный в дистрибутиве Python3 старый и стабильный, с ним связаны системные инструменты, и им владеет apt или yum; сохраните свою собственную среду выполнения в venv и оставьте интерпретатор дистрибутива в покое.

Заметка из практики

Одна случайная установка pip на корневом уровне обновила общую зависимость urllib и незаметно разрушила собственный связующий звено дистрибутива до следующего окна исправления. Венвы и закрепленные требования возникали тут же, и привычка прижилась.

Частые вопросы

Является ли Python заменой bash?

Разные задачи: bash без особых церемоний управляет двоичными файлами и конвейерами, Python владеет структурами данных, API и обработкой сбоев. В зрелых серверных комплексах используются оба варианта, и граница между ними — это то место, где на самом деле происходит проектирование.

В чем Python превосходит все остальное на сервере?

Все, что можно контролировать через REST API: облачная инвентаризация, ведение записей DNS, средства наблюдения за сроком действия SSL, изменение формы журналов с помощью реальных анализаторов; задачи bash не может представить без неуклюжей гимнастики.

Могу ли я просто установить глобально с правами root?

В современных дистрибутивах нет: PEP 668 помечает систему Python как управляемую извне, и --break-system-packages — это именно то, на что это похоже. Используйте venv или --user и укажите требования, такие как производственный код.

Как запустить скрипт Python как полноценную службу?

Модуль systemd: ExecStart указывает на сценарий под пользователем без полномочий root, Restart=при сбое, автоматически регистрируется в журнале; тогда статус systemctl и имя Journalctl -u станут интерфейсом отладки.

Как мы берём на себя команды linux и навыки работы с оболочкой

Мы разбирались с этим сотни раз: Команды и сценарии сценариев, которые решают, управляет ли администратор сервером или борется с ним: поиск, преобразование, передача и контроль текста и процессов с помощью инструментов, которые есть в каждой базовой установке. С услугой Безопасность серверов Linux и Администрирование серверов вы получаете полный цикл: мы оцениваем, внедряем, следим круглосуточно и подключаемся в течение 30 минут, когда это действительно нужно.

Поговорить с инженером

Проблема с сервером? Взломанный сайт? Медленная страница?

Критические инциденты с ответом в течение 30 минут — круглосуточно, 7 дней в неделю.

Запросить экстренную поддержку support@kinetikatech.com