Назад | Перейти на главную страницу

В чем разница между service и systemctl?

Может быть, это банальный вопрос, но мне он не совсем понятен. На одном из наших серверов запущены фоновые процессы, которые были запущены с service и некоторые другие, которые были начаты с systemctl, как это:

$ service nginx start
$ systemctl start gunicorn

В чем разница между двумя командами? Какой способ работы с фоновыми службами является предпочтительным? Как настроить предпочтительную команду?

service это команда «высокого уровня», используемая для запуска и остановки служб в различных unix и linux. В зависимости от сервис-менеджера «нижнего уровня», service перенаправляет на разные двоичные файлы.

Например, в CentOS 7 он перенаправляет на systemctl, а в CentOS 6 он напрямую вызывает относительный /etc/init.d сценарий. С другой стороны, в старых версиях Ubuntu он перенаправляется на upstart

service подходит для базового управления услугами, при прямом вызове systemctl дать больше возможностей контроля.

systemctl в основном более мощная версия service.

С участием service вы можете выполнять только команды, связанные с сервисом (т.е. status, reload, restart) тогда как с systemctl вы можете использовать более сложные команды, такие как:

systemctl is-failed name.service # check if service failed to load

Или услуги маскировки:

systemctl mask name.service

Там много полезной информации эта страница из Спросите Ubuntu.

systemctl это основная утилита для управления демонами / службами в systemd,
в то время service команда - это традиционная утилита в SysVinit Мир.

Одна из особенностей systemd - совместимость с командами SysVinit / legacy,
Итак, если у вас есть systemctl команда
service foo start будет оберткой вокруг systemctl start foo.

Та же история для chkconfig.