Если ты хоть раз поднимал сервер на 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
после изменений, и пусть твои сервисы всегда работают!
Ваш отзыв