Jaka jest różnica między usługą a systemem?

33

Być może jest to trywialne pytanie, ale nie jest dla mnie całkowicie jasne. Na jednym z naszych serwerów uruchomiono niektóre procesy w tle, które zostały uruchomione, servicea niektóre inne, które zostały uruchomione systemctl, takie jak:

$ service nginx start
$ systemctl start gunicorn

Jaka jest różnica między tymi dwoma poleceniami? Który jest preferowanym sposobem radzenia sobie z usługami w tle? Jak skonfigurować preferowane polecenie?

Aidas Bendoraitis
źródło
3
istnieje bardzo dobre wyjaśnienie tam
Félix Brunet
Bolesna część tego, niektórzy twierdzą, że usługa jest „zlikwidowana”, a jeśli nie, to dlaczego, do diabła, zmieniają kolejność argumentów, tak jak w przypadku „find / grep / locate” itp. ... brak spójności w wydaniach linuksowych :(
killjoy

Odpowiedzi:

37

serviceto polecenie „wysokiego poziomu” używane do uruchamiania i zatrzymywania usług w różnych systemach uniksowych i linuksowych. W zależności od menedżera usług „niższego poziomu” serviceprzekierowuje na różne pliki binarne.

Na przykład w CentOS 7 przekierowuje systemctl, podczas gdy w CentOS 6 bezpośrednio wywołuje /etc/init.dskrypt względny . Z drugiej strony w starszych wersjach Ubuntu przekierowuje doupstart

servicejest odpowiedni do podstawowego zarządzania usługami, a bezpośrednie połączenia systemctldają większe możliwości kontroli.

Shodanshok
źródło
9

systemctljest w zasadzie bardziej zaawansowaną wersją service.

Ze servicemożna zrobić tylko polecenia związane z usługą (czyli status, reload, restart), natomiast ze systemctlmożna użyć bardziej zaawansowanych poleceń, takich jak:

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

Lub usługi maskowania:

systemctl mask name.service

Istnieje wiele dobrych informacji na tej stronie z Zapytaj Ubuntu.

SamCyanide
źródło
1

systemctljest głównym narzędziem do kontrolowania demonów / usług systemd,
podczas gdy servicepolecenie jest tradycyjnym narzędziem na SysVinitświecie.

Jedną z funkcji systemd jest zgodność z komendami SysVinit / legacy,
więc jeśli masz systemctlkomendę,
service foo startbędzie to wszystko systemctl start foo.

Ta sama historia dla chkconfig.

maioman
źródło