Системные скрипты
Тема дорожной карты · Bash
Системные скрипты — это Bash- и shell-скрипты, используемые дистрибутивами Linux для управления запуском служб, инициализацией оборудования, настройкой пакетов и задачами системного обслуживания — они составляют основу автоматизации Linux на уровне операционной системы. Исторически System V init использовал shell-скрипты в /etc/init.d/ для запуска и остановки служб, следуя стандартному интерфейсу с подкомандами start, stop, restart и status; эти скрипты опирались на функции POSIX-оболочки, такие как log_daemon_msg из /lib/lsb/init-functions. С переходом на systemd многие из этих обязанностей перешли к юнит-файлам, однако Bash-скрипты по-прежнему критически важны для директив ExecStart, ExecStop и ExecStartPre, заданий cron в /etc/cron.d/ и хуков в /etc/network/if-up.d/ и подобных каталогах. Написание надёжных системных скриптов требует строгого соблюдения рекомендуемых практик: использования set -euo pipefail, журналирования через logger -t и обработки сигналов с помощью trap cleanup EXIT SIGTERM. Понимание системных скриптов необходимо для Linux-администраторов, DevOps-инженеров и всех, кто занимается автоматизацией инфраструктуры на основе Bash.
Как это работает
Системные скрипты: распространённые паттерны — ежедневные cron-задания, ротация логов, backup-скрипты, deployment-автоматизация, service health-check, system-level клей между unix-тулами. Комбинируйте с systemd (.service + .timer units) вместо cron, когда нужны логи + restart-on-failure + зависимости. Расписание: cron (просто), systemd timers (современнее + интегрировано), Ansible (multi-host).
Когда применять
Bash — для "связать эти тулы вместе" автоматизации (rsync + tar + ssh + email). Переходите на Ansible/Python/Go, когда скрипт растёт за ~200 строк, требует структурированных данных или multi-host координации. Всегда логируйте в syslog или файл с timestamps — сбои диагностируемы.
Типичные ошибки
Ловушки Системные скрипты: cron без логирования (job падает 6 месяцев, никто не замечает); скрипты с расчётом, что PATH такой же, как в вашем shell (cron имеет минимальный env — задавайте PATH явно); root-owned скрипты, зовущиеся из www-data через sudo NOPASSWD (privesc-поверхность — минимизируйте sudoable).