Jestem nowy w Linuksie i testowałem się przy użyciu instancji Amazon Lightsail (Ubuntu 16.04 LTS).
Przeglądając wiele przewodników, z którymi się zetknąłem, widzę ludzi używających różnych poleceń do uruchamiania / zatrzymywania / restartu / przeładowywania / sprawdzania statusu usługi. W szczególności te;
sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status
Wszystkie powyższe polecenia działają.
- Czy wolę jedno polecenie od drugiego?
- Jeśli tak, to dlaczego?
- Czy są jeszcze jakieś polecenia, o których muszę wiedzieć?
Użycie init.d w Monit spowodowało problemy, gdy chciałem użyć opcji statusu (status będzie taki, że usługa jest offline, kiedy była w trybie online - ponownie uruchomiona przez Monit). Zmień kod w Monit z inid.d na / bin / systemctl naprawił go.
Wygląda na to, że użycie init.d dostarcza więcej informacji o tym, co się stało, że inni. Jeśli powinienem używać jednego z innych poleceń, czy jest możliwe, aby wyświetlały więcej informacji o tym, co zostało zrobione?
ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$
Chciałbym z góry podziękować wszystkim, którzy poświęcili czas na przeczytanie i odpowiedź na to pytanie.
źródło
systemctl
jest preferowaną składnią iservice
zapewnia zgodność wsteczną./etc/init.d/pure-ftpd
lub podobnie wywołują skrypty start / stop bezpośrednio.Odpowiedzi:
Na początek jest cała historia i walka między przejściem od
SysVInit
doSystemD
. Zamiast próbować wyjaśnić to wszystko w jednej odpowiedzi, odsyłam cię do jakiegoś przedsięwzięcia google, aby uzyskać więcej szczegółów na temat historii, a także jeden konkretny artykuł na ten temat:http://www.tecmint.com/systemd-replaces-init-in-linux/
Podsumowując, było to powolne i uciążliwe przejście. Niektóre starsze funkcje pozostały nienaruszone (np.
init.d
Do pewnego stopnia). Jeśli masz opcję użyciasystemctl
do kontroli usług, zalecam użycie tej. To przewidywalna przyszłość dla Linuksa i ostatecznie starszeSysVInit
metody zostaną uznane za całkowicie przestarzałe i usunięte.Aby szczegółowo opisać każdą z wymienionych:
sudo systemctl status apache2.service
To nowe
SystemD
podejście do obsługi usług. Idąc dalej, aplikacje w systemie Linux są zaprojektowane tak, aby używały metody systemowej, a nie żadnej innej.sudo /bin/systemctl status apache2.service
To jest to samo, co poprzednie polecenie. Jedyną różnicą w tym przypadku jest to, że
$PATH
znalezienie polecenia nie zależy od zmiennej środowiskowej powłoki , ale jawnie wyświetla listę polecenia, włączając ścieżkę do polecenia.sudo /etc/init.d/apache2 status
Jest to oryginalna
SysVInit
metoda wywoływania usługi. Skrypty inicjujące zostałyby napisane dla usługi i umieszczone w tym katalogu. Chociaż ta metoda jest wciąż używana przez wielu,service
było to polecenie, które zastąpiło tę metodę wywoływania usług wSysVInit
. W nowszych systemach dostępna jest pewna starsza funkcjonalnośćSystemD
, ale większość nowszych programów tego nie zawiera i nie wszystkie starsze skrypty inicjujące aplikację z tym współpracują.sudo service apache2 status
Było to podstawowe narzędzie używane w
SysVInit
systemach usług. W niektórych przypadkach po prostu łączył się ze/etc/init.d/
skryptami, ale w innych przypadkach przechodził do skryptu init przechowywanego gdzie indziej. Jego celem było płynniejsze przejście do obsługi zależności usług.Na koniec wspominasz, że chcesz wiedzieć, jak uzyskać więcej informacji z poleceń, ponieważ niektóre zawierają więcej informacji niż inne. Jest to prawie zawsze określane przez aplikację i sposób zaprojektowania pliku init lub pliku usługi. Zasadniczo jednak, jeśli zakończyło się po cichu, zakończyło się powodzeniem. Aby jednak zweryfikować a
start
,stop
lubrestart
, możesz użyć poleceniastatus
podrzędnego, aby zobaczyć, jak to działa. Wspomniałeś, żestatus
polecenie jest niepoprawne w starym skrypcie inicjującym. Jest to błąd, na który musieliby spojrzeć twórcy aplikacji. Ponieważ jednak skrypty init stają się przestarzałą metodą obsługi usług, mogą po prostu zignorować błąd do momentu całkowitego usunięcia opcji skryptu init. Thesystemctl status
powinien zawsze działać poprawnie, w przeciwnym razie błąd powinien zostać zarejestrowany z twórcami aplikacji.źródło
systemctl
przeszukają katalogi, w których przechowywane są pliki usług, i dodają „.service”, jeśli je znajdzie. Na przykład, jeśli klikniesz klawisz Tab tylko po napisaniusudo systemctl status apache2
, należy go uzupełnić, dodając.service
za Ciebie. Jeśli jest więcej niż jeden plik systemowy apache2 (np..service
I.target
trzeba dwa razy