Service или Systemctl?

Каждый стартует или стопает процессы, как привык. Во времена динозавров, когда ещё не существовало systemd, всё сводилось к командам:

service apache restart

Сейчас мир изменился, появился systemd, но привычки остались прежними.

Теперь сервисами рекомендуется управлять через systemctl.

Но какая в хуй разница, как управлять сервисами?

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

На самом деле сейчас команда service — это обёртка вокруг systemctl.

Давай убедимся:

strace -f service nginx restart 2>&1 | grep execve

По итогу ты получишь:

execve("/usr/bin/systemctl", ["systemctl", "restart", "nginx.service"])

То есть service обратился к systemctl и произвёл перезапуск nginx.

А если глянуть исходник service:

cat /usr/sbin/service

То ты увидишь обычный Bash-скрипт, в котором и происходит вся эта магия.

Если система использует SysVinit или Upstart (например, старые версии Debian, CentOS 6, Ubuntu 14.04), то service будет работать напрямую со скриптами /etc/init.d/.

По бест-практикам старайся использовать systemctl. Но опять же service никто не запретит тебе использовать.

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

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Как это делаю я? И так и сяк, мне вообще похуй, главное — достигнут ожидаемый результат.

Кроме systemctl и service, есть такие штуки для управления процессами:

/etc/init.d/nginx restart
rc-service nginx restart
sv restart nginx
s6-rc -d change nginx
supervisorctl restart nginx

А чтобы проверить, какая система инициализации у тебя, вот тебе пиздатая команда:

ps -p 1 -o comm=

Вот и вся наука.

А как ты рулишь сервисами? Как скуф или как современный молодой человек?