Изменили конфиг Nginx — надо применить. Служба mysql ведёт себя странно — надо дёрнуть. Обновили php-fpm — надо перезагрузить. В каждом из этих случаев правильная команда разная. restart это не всегда то что нужно.
restart vs reload: в чём разница
Две команды которые часто путают:
restart — полная остановка процесса и запуск заново. Все текущие соединения обрываются. Конфиг перечитывается. Занимает секунды.
reload — служба остаётся запущенной, только перечитывает конфигурационный файл. Соединения не обрываются. Подходит для Nginx, Apache, sshd — там где обрыв соединений нежелателен.
Не все службы поддерживают reload — если команда вернёт ошибку, использовать restart.
Основные команды systemctl
Перезапустить службу:
sudo systemctl restart nginx
Перечитать конфиг без остановки:
sudo systemctl reload nginx
Перечитать конфиг или перезапустить если reload не поддерживается:
sudo systemctl reload-or-restart nginx
Остановить:
sudo systemctl stop nginx
Запустить:
sudo systemctl start nginx
Проверить статус:
sudo systemctl status nginx
Что показывает systemctl status
После перезапуска всегда проверять статус — убедиться что служба поднялась:
systemctl status nginx
Строка Active: active (running) — служба работает. failed — что-то пошло не так, смотреть логи.
Если служба не поднялась: читаем логи
Служба упала после перезапуска — смотреть подробности:
journalctl -u nginx -n 50 --no-pager
Логи в реальном времени — удобно при отладке конфига:
journalctl -u nginx -f
Только ошибки за текущую загрузку:
journalctl -u nginx -p err -b
В выводе будет конкретная строка с ошибкой — синтаксис конфига, занятый порт, отсутствующий файл.
Проверить конфиг перед перезапуском
Для Nginx и Apache есть встроенная проверка синтаксиса. Запускать до restart — иначе служба упадёт и не поднимется:
sudo nginx -t
sudo apache2ctl configtest
Если вывод syntax is ok — можно перезапускать.
Автозапуск: включить и выключить
Посмотреть включён ли автозапуск:
systemctl is-enabled nginx
Включить автозапуск при загрузке системы:
sudo systemctl enable nginx
Включить и сразу запустить:
sudo systemctl enable --now nginx
Выключить автозапуск:
sudo systemctl disable nginx
Перезапустить несколько служб сразу
Через пробел:
sudo systemctl restart nginx php8.1-fpm mysql
Перезапуск через service: старый способ
На старых системах (Ubuntu 16.04, CentOS 6) или в скриптах которые должны работать везде:
sudo service nginx restart
service на современных системах просто вызывает systemctl — результат одинаковый. Но systemctl даёт больше информации в статусе.
Имена служб в разных дистрибутивах
Одна и та же программа может называться по-разному:
| Программа | Debian/Ubuntu | RHEL/CentOS |
|---|---|---|
| Веб-сервер Apache | apache2 |
httpd |
| MySQL | mysql |
mysqld |
| PHP-FPM 8.1 | php8.1-fpm |
php-fpm |
| SSH-сервер | ssh |
sshd |
| Firewall | ufw |
firewalld |
Найти точное имя службы если не знаете:
systemctl list-units --type=service | grep -i nginx
Шпаргалка
| Задача | Команда |
|---|---|
| Перезапустить | sudo systemctl restart имя |
| Перечитать конфиг (без обрыва) | sudo systemctl reload имя |
| Reload или restart | sudo systemctl reload-or-restart имя |
| Остановить | sudo systemctl stop имя |
| Запустить | sudo systemctl start имя |
| Статус | systemctl status имя |
| Логи службы | journalctl -u имя -n 50 |
| Логи в реальном времени | journalctl -u имя -f |
| Включить автозапуск | sudo systemctl enable имя |
| Выключить автозапуск | sudo systemctl disable имя |
| Включить и запустить | sudo systemctl enable --now имя |
| Найти имя службы | systemctl list-units --type=service | grep -i имя |