В чем разница между сервисом и systemctl?

33

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

$ service nginx start
$ systemctl start gunicorn

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

Аидас Бендорайтис
источник
3
есть очень хорошее объяснение есть
Феликс Брюне
Болезненная часть этого, некоторые говорят, что сервис «перестал существовать», и если это не так, почему, черт возьми, они меняют порядок аргументов, как в случае с «find / grep / locate» и т. Д. ... нет согласованности в релизах Linux :(
killjoy

Ответы:

37

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

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

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

shodanshok
источник
9

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

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

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

Или маскирующие услуги:

systemctl mask name.service

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

SamCyanide
источник
1

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

Одной из функций systemd является совместимость с SysVinit / унаследованными командами,
поэтому, если у вас есть эта systemctlкоманда,
service foo startона станет оберткой systemctl start foo.

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

maioman
источник