Примечания к уровням выполненияdevops-2

При работе с уровнями выполнения в Linux есть несколько важных нюансов, которые должен учитывать DevOps-инженер. Эти примечания помогут избежать распространённых ошибок и глубже понять работу системы.

Ключевые примечания

1. Различия между дистрибутивами

Уровни выполнения могут иметь разное назначение в различных дистрибутивах:

# В RedHat/CentOS:
2 - Многопользовательский без NFS
# В Debian/Ubuntu:
2-5 - Обычно идентичны (многопользовательский с сетью)

Всегда проверяйте документацию конкретного дистрибутива.

2. systemd использует targets

Современные системы используют systemd, где:

# Вместо:
init 3
# Используйте:
systemctl isolate multi-user.target

Но традиционные команды (init, telinit) остаются для совместимости.

3. Опасность уровней 0 и 6

  • init 0 - Немедленное выключение (аналог poweroff)
  • init 6 - Немедленная перезагрузка (аналог reboot)

Важно: Эти команды не спрашивают подтверждения!

4. Уровень 1 требует осторожности

  • Нет сети → нельзя подключиться удалённо
  • Только root доступ → риск случайных изменений
  • Часто требует физического доступа к серверу

5. Пользовательские уровни

Могут быть настроены, но:

  • Требуют ручного создания скриптов в /etc/rc.d/rcX.d/
  • Могут вызвать проблемы при обновлениях
  • Редко используются на практике

6. Просмотр зависимостей в systemd

Для понимания что включается в конкретном target:

systemctl list-dependencies multi-user.target

7. Изменение уровня по умолчанию

В SysVinit:

# Редактировать /etc/inittab:
id:5:initdefault:

В systemd:

systemctl set-default graphical.target

Практические советы

  1. Для серверов обычно используют уровень 3 (или multi-user.target)

  2. Для рабочих станций - уровень 5 (graphical.target)

  3. При проблемах - уровень 1 (rescue.target)

  4. Всегда проверяйте текущий уровень перед изменением:

    who -r  # или systemctl get-default
    
  5. В скриптах предпочтительнее использовать:

    systemctl reboot  # вместо init 6
    systemctl poweroff  # вместо init 0
    

Резюмируем

  • Уровни выполнения - legacy-концепция, но важна для понимания системы
  • В systemd используйте targets вместо прямого управления runlevels
  • Уровни 0 и 6 - "опасные", выполняются без подтверждения
  • Дистрибутивы могут трактовать уровни по-разному
  • Для серверов оптимален уровень 3/multi-user.target
  • Всегда проверяйте текущую конфигурацию перед изменениями