Jaka jest różnica między restartem, init 6 i zamknięciem -r teraz?


Odpowiedzi:


83

Nie ma w nich różnicy. Wewnętrznie robią dokładnie to samo:

  • rebootużywa shutdownpolecenia (z przełącznikiem -r). Polecenie shutdown użyte do zabicia wszystkich uruchomionych procesów, odmontowania wszystkich systemów plików i na koniec informuje jądro o wydaniu polecenia zasilania ACPI. Źródło można znaleźć tutaj . W starszych dystrybucjach komenda reboot zmusiła procesy do wyjścia poprzez wydanie SIGKILLsygnału (wciąż znajdowanego w źródłach, można wywołać z -fopcją), w najnowszych dystrybucjach domyślnie jest bardziej wdzięczny i przyjazny dla init init 1 -> shutdown -r. Zapewnia to, że demony czyszczą się przed wyłączeniem.

  • init 6mówi initprocesowi, aby zamknął wszystkie odrodzone procesy / demony zapisane w plikach init (w odwrotnej kolejności, w jakiej zostały uruchomione) i na koniec wywołuje shutdown -r nowpolecenie ponownego uruchomienia komputera

Dzisiaj nie ma dużej różnicy, ponieważ obie komendy robią dokładnie to samo i szanują skrypty inicjujące używane do uruchamiania usług / demonów, wywołując dla nich skrypty zamykające. Z wyjątkiem przypadków reboot -f -r nowokreślonych poniżej

Na stronach podręcznika wyjaśniono, dlaczego reboot -fnie jest to bezpieczne:

  -f, --force
    Wymuś natychmiastowe zatrzymanie, wyłączenie zasilania, ponowne uruchomienie. Nie kontaktuj się z systemem init.

Edytować:

Zapomniałem wspomnieć, że w nadchodzących dystrybucjach RHEL powinieneś użyć nowego systemctlpolecenia, aby wydać polecenie poweroff / restart. Jak podano na stronach podręcznika rebooti shutdownsą one „starszym poleceniem dostępnym tylko dla kompatybilności”. i systemctlmetoda będzie jedyną bezpieczną.


Czasami mój restart uruchamia się w SIGTERM, czy istnieje sposób, aby dowiedzieć się, dlaczego, a także istnieje sposób na przekroczenie limitu czasu ponownego uruchomienia, tak że jeśli zajmie to zbyt długo, wymusi restart?
CMCDragonkai

2
Te wersje RHEL nie są już „nadchodzące”. ☺ Jak wyjaśniono bardziej szczegółowo na stronie unix.stackexchange.com/a/196014/5132 , w takich systemach operacyjnych nie ma żadnej różnicy. Nie są to nawet różne programy.
JdeBP

Czy literówka mówiłaś init 1 -> shutdown -r?
deed02392

Twój link jest uszkodzony.
whoKnows

8

Zalecane jest zamknięcie, ponieważ pozwala określić przyczynę drastycznego działania - coś, co zawsze należy zrobić. Wiadomość zostanie zapisana w dzienniku (ach) dla potomności. Na przykład:

shutdown -r now 'Kernel upgrade requires reboot'

Możesz także wykonać zaplanowane ponowne uruchomienie - określając coś innego niż nowczas ponownego uruchomienia:

shutdown -r 22:00 'Work around kernel memory leak'

Wówczas użytkownicy otrzymają okresowe przypomnienia, aby wydostać się w miarę upływu czasu - proces będzie bardziej uporządkowany i profesjonalny.


5

Na tradycyjnych jednorożcach rebooti shutdown -r nowsą bardzo różne polecenia. Przy typowym użyciu rebootmożna bezpiecznie korzystać tylko w trybie pojedynczego użytkownika.

shutdown -r nowto kanoniczna metoda zamykania różnych * nixów, bezpieczniejsza w użyciu i ogólnie funkcjonalnie równoważna init 6.

init (8) restart (8)


4

Na FreeBSD istnieje różnica między rebooti shutdown -r now. Ze strony podręcznika reboot:

Zwykle narzędzie shutdown (8) jest używane, gdy system musi zostać zatrzymany lub zrestartowany, dając użytkownikom wcześniejsze ostrzeżenie o zbliżającym się przeznaczeniu i czysto kończąc określone programy.


1
Nie jest to jednak pytanie BSD, o czym świadczy znacznik pytania i użycie poziomu uruchamiania Systemu 5 w jednej z komend. ☺
JdeBP

1
Wiem, że to pytanie o Linuksa. Pomyślałem, że ktoś może uznać za przydatne wiedzieć, że w niektórych innych systemach jest to różnica.
Marián Černý
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.