Введение
Runlevel — это состояние системы, определяющее набор запущенных сервисов и уровень взаимодействия с пользователем. Понимание уровней запуска позволяет вручную контролировать процесс загрузки, устранять проблемы или настраивать автозагрузку нужных служб. После выполнения этой инструкции вы сможете быстро переключаться между режимами и настраивать автозагрузку.
Требования
- Поддерживаемые дистрибутивы: Ubuntu 20.04, Ubuntu 22.04, Debian 11, CentOS 8.
- Доступ к
sudo(права администратора). - Система на базе init или systemd.
Пошаговая инструкция
Шаг 1: Проверка текущего уровня запуска
Выполните runlevel, чтобы увидеть текущий и предыдущий уровни. В systemd также полезно выполнить systemctl get-default — команда показывает целевой уровень загрузки.
runlevel
# или
systemctl get-default
Шаг 2: Выбор нужного уровня
Типичные уровни:
0— полное выключение питания.1— одиночная пользовательская консоль (без сетевых сервисов).2— многопользовательский режим без сетевых сервисов.3— полноценный консольный режим (CLI).5— графический режим с X‑в окном (самый распространённый для десктопов).6— перезагрузка.
Определите, какой уровень вам нужен для текущей задачи.
Шаг 3: Переключение на нужный уровень
Для систем на init:
sudo init 3 # пример переключения на уровень 3
Для systemd:
sudo systemctl set-default multi-user.target
sudo systemctl isolate multi-user.target
Система перейдёт в выбранный режим после выполнения команд.
Шаг 4: Настройка автозагрузки через rc.local
Если вы используете SysVinit, отредактируйте /etc/rc.local. Добавьте нужные команды перед строкой exit 0. Пример:
#!/bin/bash
# Разрешить вход через SSH по паролю (если необходимо)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Сделайте файл исполняемым:
chmod +x /etc/rc.local
В systemd аналогичную автозагрузку реализуют через сервисы или таймеры, но rc.local подходит для простых сценариев.
Шаг 5: Проверка запущенных сервисов
Подтвердите, что система работает в выбранном режиме:
systemctl list-units --type=service --state=running
# или
ps -aux | grep -E 'sshd|apache|nginx'
Если сервисы отсутствуют, проверьте их статус (systemctl status name) и устраните проблему.
Проверка результата
Повторите команду runlevel или systemctl get-default. Если отображаемый уровень совпадает с выбранным, переключение прошло успешно. Проверьте критически важные сервисы (systemctl status sshd, systemctl status nginx), чтобы убедиться, что они работают.
Возможные проблемы
- Отсутствие прав: выполнение команд без
sudoприводит кPermission denied. Используйтеsudoили перейдите в учётную запись root. - Отсутствие
/etc/rc.local: в некоторых дистрибутивах этот файл удалён. Создайте его вручную (sudo nano /etc/rc.local). - Неправильный init: если система использует systemd,
initможет быть псевдонимом дляsystemctl. Предпочтительно использовать команды systemd. - Неправильный уровень: переход на уровень
0или6остановит или перезагрузит систему. Будьте осторожны, используйте эти уровни только при необходимости.