Может быть, это банальный вопрос, но мне он не совсем понятен. На одном из наших серверов запущены фоновые процессы, которые были запущены с 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
.