Если ты хоть раз поднимал сервер на Linux, то наверняка сталкивался с systemctl. Это не просто какая-то очередная тулза для запуска демонов — это твой швейцарский нож для управления сервисами в современных дистрибутивах. Без него никуда: хочешь поднять nginx, рестартануть PostgreSQL, посмотреть статус sshd — всё через systemctl. В этом посте разложу по полочкам, как это работает, зачем оно нужно, и как не наступить на грабли.
Зачем вообще нужен systemctl?
Раньше в Linux были всякие service, init.d и прочий олдскул, где всё было через костыли и shell-скрипты. С приходом systemd, который почти везде дефолтный, жизнь стала проще и одновременно сложнее. systemctl — это основной инструмент для общения с systemd. Он позволяет:
- Запускать, останавливать, перезапускать сервисы
- Включать/выключать автозапуск
- Смотреть логи и статусы
- Работать с юнитами (не только сервисы, но и таймеры, сокеты, маунты и пр.)
Что требуется
- ОС: Любой современный Linux-дистрибутив: Ubuntu (16.04+), Debian (8+), CentOS/RHEL (7+), Fedora, Arch — почти всё, что не совсем древнее.
- Железо: Подойдёт любой сервер или даже виртуалка. Systemd работает и на Raspberry Pi, и на мощных серверах.
- Права: Для управления системными сервисами — root или sudo.
Установка (пошаговая инструкция)
В большинстве случаев systemd и systemctl уже стоят «из коробки». Но если вдруг у тебя минимальная сборка, вот как проверить и поставить:
- Проверь, установлен ли systemctl:
which systemctlЕсли путь есть — всё ок. Если пусто, значит надо ставить.
- Установка на Debian/Ubuntu:
sudo apt update sudo apt install systemd - Установка на CentOS/RHEL:
sudo yum install systemd - Установка на Arch Linux:
sudo pacman -Syu systemd - Проверь версию:
systemctl --version - Если после установки не работает — возможно, ты не в systemd-based системе (например, старый OpenVZ или WSL1). Тут проще пересесть на что-то свежее.
Использование: команды и варианты
Вот самые ходовые команды, которые реально нужны каждый день:
- Старт сервиса:
sudo systemctl start nginx - Остановить сервис:
sudo systemctl stop nginx - Перезапустить сервис:
sudo systemctl restart nginx - Плавный перезапуск (reload):
sudo systemctl reload nginx(Если поддерживается самим сервисом)
- Включить автозапуск:
sudo systemctl enable nginx - Отключить автозапуск:
sudo systemctl disable nginx - Проверить статус:
systemctl status nginx - Посмотреть все активные сервисы:
systemctl list-units --type=service - Посмотреть все юниты (сервисы, таймеры и пр.):
systemctl list-units - Показать автозапускаемые юниты:
systemctl list-unit-files --state=enabled - Перезагрузить машину:
sudo systemctl reboot - Выключить машину:
sudo systemctl poweroff - Смотреть логи сервиса (через journal):
journalctl -u nginx
Полный список команд — man systemctl.
Ошибки и как делать не надо
- Не лезь руками в /etc/init.d — это прошлый век.
- Не редактируй напрямую юнит-файлы в /lib/systemd/system/ — используй
systemctl editили копируй в/etc/systemd/system/. - Если меняешь юнит-файлы, не забывай делать:
sudo systemctl daemon-reloadИначе systemd не увидит твои изменения.
- Не путай enable/disable с start/stop. Enable — это про автозапуск, start — про текущее состояние.
- Не игнорируй статусы и логи. Если сервис не стартует,
systemctl statusиjournalctl -xeрасскажут почему.
Реальный пример из практики
Допустим, ты деплоишь свой pet-проект на VPS. У тебя есть myapp.service:
[Unit]
Description=My Awesome App
[Service]
ExecStart=/opt/myapp/bin/start.sh
Restart=always
User=appuser
[Install]
WantedBy=multi-user.target
Копируешь этот файл в /etc/systemd/system/myapp.service:
sudo cp myapp.service /etc/systemd/system/
Делаешь:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp
Теперь твой сервис стартует автоматически после ребута, все логи можно смотреть через journalctl -u myapp. Если что-то пошло не так — status и journalctl помогут найти ошибку.
Заключение
systemctl — это must-have для любого, кто работает с Linux. Управлять сервисами стало реально удобно, всё логично и предсказуемо (ну, почти всегда). Если хочешь глубже — читай Arch Wiki и официальную документацию. А если что-то не взлетает — гугли ошибку, скорее всего, кто-то уже наступал на этот грабель.
Пользуйся systemctl с умом, не забывай про daemon-reload после изменений, и пусть твои сервисы всегда работают!
Ваш отзыв