Jaka jest różnica między poleceniami Zatrzymaj i Zamknij?

97

Jaka jest różnica między poleceniami halti shutdown?

wassimans
źródło

Odpowiedzi:

77

Zasadniczo używa się shutdownpolecenia . Umożliwia opóźnienie czasowe i komunikat ostrzegawczy przed zamknięciem lub ponownym uruchomieniem, co jest ważne dla administrowania systemem serwerów powłoki wielu użytkowników; może zapewnić użytkownikom wcześniejsze powiadomienie o przestoju.

W związku z tym należy użyć polecenia shutdown w taki sposób, aby natychmiast zatrzymać / wyłączyć komputer (przynajmniej w Linuksie i FreeBSD):

shutdown -h now

Lub uruchom ponownie z niestandardowym 30-minutowym wyprzedzeniem:

shutdown -r +30 "Planned software upgrades"

Po opóźnieniu shutdownmówi inito zmianie na poziom 0 (zatrzymanie) lub 6 (ponowne uruchomienie). (Pamiętaj, że pominięcie -hlub -rspowoduje przejście systemu w tryb jednego użytkownika (poziom 1), który zabija większość procesów systemowych, ale w rzeczywistości nie zatrzymuje systemu; nadal pozwala administratorowi pozostać zalogowanym jako root.)

Po zabiciu procesów systemowych i odmontowaniu systemów plików system zatrzymuje się / wyłącza lub automatycznie uruchamia się ponownie. Odbywa się to za pomocą polecenia haltlubreboot , które synchronizuje zmiany na dyskach, a następnie wykonuje faktyczne zatrzymanie / wyłączenie zasilania lub ponowne uruchomienie.

W systemie Linux, jeśli haltlub rebootjest uruchamiany, gdy system nie rozpoczął jeszcze procesu zamykania, wywoła shutdownpolecenie automatycznie, zamiast bezpośrednio wykonywać zamierzoną akcję. Jednak w systemach takich jak FreeBSD komendy te najpierw logują akcję, wtmpa następnie natychmiast wykonują zatrzymanie / ponowne uruchomienie komputera, bez wcześniejszego zabijania procesów lub odmontowywania systemów plików.

Proszę wstać
źródło
Dobre wytłumaczenie!
18
… Ale teraz nieaktualne. W systemdowych systemach operacyjnych Linux te komendy istnieją (słowami systemd doco) „tylko dla kompatybilności”. Nie ma oddzielenia halt, rebootoraz shutdownprogramy, które powołać jedną inną. Istnieje jeden program z wieloma parserami wiersza poleceń, które wewnętrznie przechodzą w jedną ścieżkę kodu. Nie ma też poziomów uruchamiania. Wyłączenie nie przechodzi również w tryb pojedynczego użytkownika. W rzeczywistości sam tryb pojedynczego użytkownika został przemianowany. Aby uzyskać szczegółowe informacje, zobacz unix.stackexchange.com/a/196014/5132 .
JdeBP
49

Przeszłość

W 1980 roku, BSD miał halt, rebooti shutdown. System 5 UNIX miał zestaw narzędzi zgodny z BSD. Ale natywnie miał swoje własne, inne shutdownpolecenie; i nie miałem haltlub rebootwcale. (Niektóre warianty Systemu 5 miały takie rzeczy jak SCO XENIX haltsys.)

BSD halti rebootpolecenia były na niskim poziomie, drastyczne i natychmiastowe. Taktowny sposób na zamknięcie systemu BSD było shutdownpolecenie, które nie wszystkie rzeczy, które oczekuje się zdarzyć: wallwiadomości do użytkowników, usługi wdzięcznie zabity wpisy napisane dziennika logowania wyłączona, i tak dalej.

Podczas gdy BSD były w dużej mierze źródłem otrzymanej mądrości, że „ shutdownexecs halt/ reboot”, i że te ostatnie miały być używane ostrożnie; był to system 5 świat, w którym ludzie nauczyli się, że zwyczaj przeciwny halt/ rebootbyły tylko poręczne shorthands i nic więcej: /usr/ucb/halt, z „Pakietu zgodności BSD”, nie różnił się w istocie do shutdown -h. Obaj skończyli init 0.

Dalsza lektura

Dzisiaj

Obecnie mamy szereg możliwych zestawów narzędzi do zarządzania systemem. BSD wciąż mają swój zestaw narzędzi, chociaż w latach 90. zostały oczyszczone z wszelkich możliwych AT & Tisms. Miquel van Smoorenburg w 1992 roku (ponownie) napisał Linux init+ rci powiązane z nim narzędzia, które ludzie nazywają teraz „init System 5”, mimo że tak naprawdę nie jest to oprogramowanie z systemu UNIX System 5 (i to nie tylko init). Istnieją również Systemd , dorobkiewicz i nosh , z których każdy ma swoje własne implementacje z halt, reboot, fasthalt, fastboot, i tak dalej.

Zestawy narzędzi również się powiększyły i zmieniły. Istnieje teraz poweroffpolecenie, którego nie ma w systemach operacyjnych z lat 80., ponieważ centralne jednostki przetwarzania na większości współczesnych maszyn nie miały możliwości kontrolowania swoich zasilaczy. W szczególności zestawy narzędzi dla systemu Linux uzyskały polecenia BSD; ale podobnie jak narzędzia kompatybilności z BSD w systemie UNIX System 5, nie są one dokładnymi podobieństwami i zostały w dużej mierze spłaszczone.

To spłaszczenie doprowadziło nas do punktu, w którym halti shutdownsą w większości takie same. Ale dokładne szczegóły różnią się w zależności od zestawu narzędzi, a mechanika każdego zestawu narzędzi jest nieco inna.

Stwierdzono również przyniósł nam do nieco kłopotliwej sytuacji, w której ten zestaw poleceń stała się tak obwieszone z opcji zgodności, że teraz pozwala ludziom dać komputery instrukcjami wewnętrznie sprzeczne, jak reboot --halti poweroff --reboot, jak już wspomniano w stronie podręcznika dla nosh halt, fasthalt, reboot, fastboot, i poweroffpolecenia. ☺

Zestaw narzędzi systemowych

halt, reboot, poweroff, telinit, I shutdownto wszystko jeden program . To właściwie własny systemctlprogram systemowy . Ma kilka parserów wiersza poleceń dla różnych składni wiersza poleceń tych poleceń, a także własne, ale potem w dużej mierze kieruje wewnętrznie jedną ścieżkę kodu. Nie ma różnicy między używaniem halti jego opcjami polecenia do wyzwalania akcji, a używaniem shutdowni opcjami polecenia do wyzwalania tej samej akcji.

Systemd nie uważa trybu ratunkowego (który nazwali ludzie z systemem za tryb pojedynczego użytkownika ) jako stanu zamknięcia systemu i nie można go osiągnąć za pomocą żadnej z tych komend. Opcja bez opcji shutdown nowjest taka sama jak poweroff.

Dalsza lektura:

BSD

BSD w dużej mierze zachowują swoją semantykę z lat 80. halti shutdowndlatego nie są bardzo równoważne w swoich zestawach narzędzi. halti rebootsą jednym programem; i nadal są na niskim poziomie, natychmiastowe i drastyczne. Podczas gdy, shutdowna powerofftakże w jednym programie, wykonuj wszystkie ważne rzeczy, takie jak zaplanowane zamykanie, pisanie wallwiadomości, akcje rejestrowania, wyłączanie logowania i tak dalej.

W zestawach narzędzi BSD shutdown/ powerofftradycyjnie kończyło się na wywoływaniu halt/ w rebootcelu wprowadzenia ostatecznej zmiany stanu systemu. (Często w dzisiejszych czasach niepoprawna) otrzymała mądrość, że „ shutdownexec halt/ reboot” w rzeczywistości nadal utrzymuje NetBSD i OpenBSD. Ale w FreeBSD / TrueOS / DragonFlyBSD dzieje się tak tylko wtedy, gdy -oopcja jest używana. Na te BSD, zarówno tych programów zwykle wprowadzają ostateczną zmianę stanu systemu wysyłając różne sygnały ( INT, USR1, i USR2) przetwarzanie # 1. initwykonuje wszystkie zarządzanie stanem systemu w tych systemach.

Na każdym z nich, opcja mniej shutdown nownie jest równoznaczne z dowolnego halt, rebootlub poweroff. Przechodzi do trybu pojedynczego użytkownika BSD , z którego można przejść z powrotem do trybu wielu użytkowników .

Dalsza lektura:

Zestaw narzędzi Nosh

W nosh zestaw narzędzi do zarządzania systemem, halt, fasthalt, poweroff, fastpoweroff, reboot, i fastbootto wszystko jeden program. Jest to podkładka kompatybilności wstecznej, która zwykle po prostu łączy shutdown, przeciwnie do otrzymanej mądrości. Ta --forceopcja powoduje, że system-controlzamiast tego łańcuch .

Tak więc nie ma różnicy (nieobecnej --force) między haltpoleceniem a shutdownpoleceniem (z równoważną opcją) w tym zestawie narzędzi, ponieważ ten zestaw poleceń „Kompatybilność z BSD / System 5” jest po prostu cienką warstwą podkładki shutdown.

Dalsza lektura:

Zestaw narzędzi upstart

Podobnie jak w przypadku nosh, w zestawie narzędzi do zarządzania systemem upstart obowiązuje odwrotność otrzymanej mądrości BSD. halt, rebooti poweroffwszystkie są jednym programem, który zwykle łączy się z shutdown; chyba że --forceużyto opcji, która powoduje, że reboot()system sam się wywołuje.

Zatem znowu nie ma różnicy (nieobecnej --force) między haltpoleceniem a shutdownpoleceniem (z równoważną opcją) w tym zestawie narzędzi. Również znowu, bez opcji shutdown now(które żadna z halt, rebootlub poweroffmoże zakończyć się wywoływaniem, ponieważ wszystkie ustawione opcje) wprowadzają system w tryb pojedynczego użytkownika, zamiast go wyłączać.

Dalsza lektura:

Linux System 5 init+ rczestaw narzędzi

Ponownie, w tym zestawie narzędzi ma zastosowanie przeciwieństwo otrzymanej mądrości BSD halti rebootpo prostu łańcuch do shutdown- chyba, że ​​system jest już w fazie wyłączenia lub zatrzymania „poziomów uruchomieniowych”, w którym to przypadku polecenia te faktycznie wprowadzają ostateczną zmianę stanu systemu. shutdownz kolei łańcuchy do init.

Zatem znowu nie ma różnicy (chyba że system jest już w dużej mierze zamknięty) między halti shutdownponieważ ten pierwszy wywołuje ten drugi. I tak, znowu, bez opcji shutdown now(które żadna z halt, rebootlub poweroffmoże zakończyć się wywoływaniem, ponieważ wszystkie ustawione opcje) wprowadzają system w tryb pojedynczego użytkownika, zamiast go wyłączać.

JdeBP
źródło
Właśnie dlatego system głosowania nie działa, gdy 80% głosujących
ychaouche
Mówicie: „zatrzymanie i ponowne uruchomienie to jeden program, i wciąż są na niskim poziomie, natychmiastowe i drastyczne”, co nie wydaje się mieć miejsca. Cytuję stronę podręcznika zatrzymania z dragonflyBSD, która mówi: Narzędzia zatrzymania i ponownego uruchomienia opróżniają pamięć podręczną systemu plików na dysk, wysyłają wszystkie działające procesy SIGTERM (a następnie SIGKILL) i, odpowiednio, zatrzymują lub restartują system. Działanie jest rejestrowane, w tym wpisanie rekordu zamknięcia do pliku wtmp (5). Zobacz: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche
Teraz idź i przeczytaj ponownie odpowiedź, bo już wyraźnie podany (dwukrotnie) zbiór rzeczy, których nie ma na tej liście; taki, który jest również opisany w instrukcjach administratora różnych systemów BSD.
JdeBP,
jaka lista @JdeBP?
ychaouche
11

Podejrzewam, że jest to w pewnym stopniu zależne od używanej wersji systemu UNIX / Linux. Na Centos (i spodziewam się innych współczesnych Linuksów) zatrzymaj zamykanie połączeń (pod warunkiem, że nie masz poziomu 0 lub 6), aby system został zamknięty. W systemie Solaris 10 halt jest bardziej brutalny, po prostu opróżnia pamięć podręczną dysku i wyłącza system - nie próbuje się uruchamiać żadnych skryptów ani wyłączać funkcji smf .


źródło
2

Dla tych, którzy używają AWS EC2: na AWS shutdown zatrzymuje instancję, gdy ją halt kończy .

dveim
źródło
Jaka jest różnica między zatrzymaniem a zakończeniem ?
roaima,
To zupełnie inny temat, będąc tutaj poza szczytem, ​​dlatego o tym nie wspomniałem. Ale możesz zajrzeć na docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
dveim
1
Więc w swojej odpowiedzi mówisz, że stop robi to, co mówi, i zatrzymuje instancję, podczas gdy halt (lub, w alternatywnej terminologii, terminate ), kończy instancję i usuwa ją.
roaima,
Tak. Ale to jest specyficzne dla AWS.
dveim
Ach Widzę. OP nie podał kontekstu. Ty masz. Dzięki.
roaima,
0

W Linuksie „halt” i „restart” są aliasami polecenia zamykania - shutdown -hi shutdown -rodpowiednio. Zamknięcie systemu bez słów zakłada na ogół -h.

Shadur
źródło
10
Nie są aliasesw sensie aliasów powłoki, ale tak, w haltzasadzie po prostu wywołują shutdown -hi rebooturuchamiają shutdown -r. Zauważ, że jeśli przekażesz -fopcję (force) do haltlub reboot, nieshutdown zostanie wywołane.
Mikel
W rzeczywistości, choć nadal jest to błędne, w systemowych systemach operacyjnych opis Shadura jest bliższy prawdy niż korekta Mikela. Nie ma „A tylko wywołuje B”. Wszystkie są alternatywnymi sposobami wywoływania jednego programu , jak wyjaśniono bardziej szczegółowo na stronie unix.stackexchange.com/a/196014/5132 .
JdeBP
@JdeBP Kiedy pisałem, systemd był niedostępny przez mniej niż rok i nigdy o nim nie słyszałem. :)
Shadur
1
@JdeBP Przyrównam je do, powiedzmy, sendmailpolecenia w tym momencie - Podobnie jak w przypadku MTA, tak naprawdę nie ma znaczenia, jakiego systemu init używasz, ponieważ wszystkie rozpoznają jedno shutdowni drugie halt.
Shadur
1
W rzeczywistości ma to znaczenie; ponieważ istnieją subtelne i rzeczywiście subtelne różnice między zestawami narzędzi. Jak na ironię, tak jest również w przypadku sendmailpolecenia. To jest jak sendmailpolecenie, ale nie tak, jak myślisz.
JdeBP