Надёжные Bash-сценарии на НАЙС.ОС¶
Bash удобен для автоматизации диагностики, обслуживания и периодических операций. Для производственного сценария важнее проверяемость и предсказуемость, чем число сокращённых команд.
Простой сценарий диагностики¶
Создайте собственный файл check-niceos.sh:
#!/usr/bin/env bash
set -Eeuo pipefail
printf 'OS: '
. /etc/os-release
printf '%s %s\n' "${NAME:-unknown}" "${VERSION_ID:-unknown}"
printf 'Kernel: '
uname -r
printf '\nInterfaces:\n'
ip -br link
printf '\nRoutes:\n'
ip -4 route
printf '\nFailed units:\n'
systemctl --failed --no-pager
Проверьте синтаксис и выполните:
Сценарий не изменяет систему и пригоден для первого теста автоматизации.
Что делает set -Eeuo pipefail¶
-eзавершает сценарий при некоторых необработанных ошибках (не во всех конструкциях Bash).-Eсохраняет ERR-trap в функциях и подкомандах, если trap установлен.-uсчитает обращение к неопределённой переменной ошибкой.pipefailвозвращает ошибку, если часть конвейера завершилась неуспешно.
Эти параметры не заменяют обработку ошибок, особенно в if, &&, ||, конвейерах и подстановках команд. Проверяйте критические этапы явно.
Правила оформления¶
- Цитируйте значения переменных:
"$file","$interface". - Применяйте
mktempдля временных файлов и чистите их черезtrap. - Не храните пароли в аргументах команд и в shell history.
- Проверяйте зависимость через
command -v, прежде чем запускать необязательный инструмент. - Для редактирования firewall/сети сначала считывайте текущую конфигурацию, готовьте откат и журналируйте изменения.
- Для systemd-службы лучше написать собственный unit, чем оставлять долгоживущий процесс внутри SSH-сеанса.
Сценарий и права root¶
Не запускайте весь сценарий с полномочиями root, если только несколько его шагов требуют прав администратора. Сводите объём привилегий к минимуму и проверяйте пути файлов, которые создаёт или удаляет скрипт.
Для автоматизации в НАЙС.ОС удобны systemd service/timer (см. руководство systemd).