Najlepszy sposób, aby z wdziękiem zrestartować CentOS?

81

Zawsze używałem polecenia:

shutdown -r now

Czasami jednak powoduje to problemy z MySQL.

Jaki jest najbardziej wdzięczny sposób na ponowne uruchomienie CentOS?

Widziałem:

reboot

i

halt

Jak mogę delikatnie zrestartować komputer?

Użytkownik
źródło
3
rebootjest zasadniczo pseudonimem dla shutdown -r... więc ... tak.
Nathan C
Czy mój post odpowiedział na twoje pytanie, czy potrzebujesz czegoś jeszcze?
Joffrey
Nie mogę tutaj jeszcze komentować, ale chciałem tutaj umieścić ostrzeżenie o ponownym uruchomieniu komputera. Jeśli instancja znajduje się na Amazon EC2, ponowne uruchomienie -h teraz ją zablokuje, więc nigdy tego nie rób. Zamiast tego, jeśli musisz zamknąć lub zrestartować komputer, zrób to za pośrednictwem interfejsu internetowego Amazon, a nie powłoki. Jeśli utworzysz cegłę instancję, możesz ją zatrzymać, odłączyć wolumin, utworzyć osobną instancję i dołączyć do niej wolumin, bez odłączania pierwszego woluminu dostarczonego z nową instancją. Następnie musisz ssh w nowej instancji, zamontować stary wolumin i usunąć z niego pliki.
kloddant
w rzeczywistości chcesz uruchomić sync: sync;przed uruchomieniem, shutdown -raby wszystkie operacje we / wy pliku zostały zsynchronizowane. Podejrzewam, że to również rozwiąże problem zmysql
user3629249

Odpowiedzi:

92

Nie ma lepszego sposobu na zrestartowanie serwera przy użyciu czegokolwiek innego niż te polecenia.

  • zamknięcie jest najczęstszym sposobem zatrzymania systemu. Dodanie argumentu -ri określonego czasu (lub „ now”) spowoduje ponowne uruchomienie systemu zamiast zatrzymywania go po sekwencji zamykania.
  • reboot jest zamkniętym zamknięciem, które wymaga konserwacji dysku twardego (synchronizacja i / lub przełączanie w tryb gotowości i nie jest tak naprawdę istotne).
  • Nowe wersje reboot(> 2.74) zostaną zainicjowane, shutdownjeśli nie będą na poziomie 0 lub 6.
  • Większość skryptów inicjujących wywołuje zatrzymanie, aby zalogować się do utmp .

Nowoczesne dystrybucje będą obejmować wszystkie zadania, niezależnie od tego, którego polecenia używasz. Zasadniczo wszystkie one inicjują czas zamykania twoich skryptów SysV (CentOS <7) lub systemd (CentOS> = 7) (nazywam je skryptami inicjującymi dla ułatwienia czytania).

Wyłączanie przy użyciu skryptów startowych krok po kroku zatrzymać wszystkie swoje usługi zarejestrowane pod zwykle runlevel „S”. Poszczególne skrypty inicjujące mogą mieć limit czasu, podobnie jak skrypt inicjujący MySQL w CentOS. Gdy podany zostanie argument stop, a demon nie zostanie zamknięty w odpowiednim czasie, skrypt zatrzyma się i zakończy działanie, powodując awarię. Proces zamykania będzie kontynuowany, jakby nic się nie stało, trwa tylko trochę dłużej i prawdopodobnie wydrukuje ostrzeżenie. Na koniec, gdy wszystkie skrypty inicjujące zostaną wykonane, nastąpi nieuniknione: wszystkie nadal działające procesy otrzymają SIGTERM sygnał, a po kilku sekundach (2 lub 5) a SIGKILL. Spowoduje to wyczyszczenie reszty przed wykonaniem połączenia ACPI w celu ponownego uruchomienia lub wyłączenia systemu.

Jednym wyjątkiem jest użycie rebootpolecenia z -fopcją, spowoduje to pominięcie wykonywania skryptów inicjujących i bezpośrednie ponowne uruchomienie systemu.

Lepiej będzie ustalić przyczynę swoich obaw: MySQL nie zamyka się poprawnie.

Często wynika to z ogromnego obciążenia pracą, którą należy wykonać, aby daemon mógł zostać bezpiecznie zamknięty. Kiedyś miałem instancję MySQL z +300.000 tabel, których wyjście zajęło ponad godzinę. Podobne problemy można znaleźć w systemach wykorzystujących ogromne bufory i rzadką dostępność we / wy.

Joffrey
źródło
31

Pełne zamknięcie Centos 6.x powinno zostać wykonane przy użyciu polecenia jako root:

shutdown -h now

Spowoduje to próbę zatrzymania wszystkich uruchomionych usług przed płynnym zamknięciem serwera.

Użycie tego polecenia zapobiega również problemom z gniazdem mySQL.

Podobnie w przypadku płynnego restartu:

reboot -h now

Możesz przeczytać poprzednią odpowiedź na podobne pytanie tutaj:

https://stackoverflow.com/questions/20407292/centos-another-mysql-daemon-already-running-with-the-same-unix-socket

GeckoSEO
źródło
7
Myślę, że masz na myśli shutdown -r now, a może po prostu reboot. rebootPolecenie nie posiada -hopcji.
Michael Hampton
1
Cześć Michael, Centos 6.x rzeczywiście ma opcję zatrzymania usług przed ponownym uruchomieniem. „shutdown -h now” to płynne zamknięcie, a „restart -h teraz” to płynne ponowne uruchomienie. Wypróbuj na swoim serwerze
Centos
1
O? A co robi ta -hopcja? Nie ma go na stronie podręcznika.
Michael Hampton
2
Naprawdę? Czy masz na to dokumentację? Ponieważ po pierwsze to właśnie rebootrobi bez -h . Po drugie, o ile mi wiadomo, wcale nie jest tak udokumentowane.
Michael Hampton
2
Dokument, który właśnie połączyłeś, podaje dokładnie to, co ci powiedziałem! rebootnie ma -hopcji, shutdownrobi.
Michael Hampton
2

Udzielając zdalnych instrukcji użytkownikom końcowym i klientom, polecam im, aby użyli poweroffdo zamknięcia i wyłączenia systemu.

Jeśli chcą ciepłego ponownego uruchomienia, sugeruję, aby użyli rebootpolecenia.

Przypuszczam, że można powiedzieć, że wydanieCtrl-Alt-Delete również to osiąga;)

ewwhite
źródło
Nie zgadzam się z tą odpowiedzią. restart i zamknięcie systemu (Ctrl-Alt-Delete) jest wymuszone i może w niektórych środowiskach, takich jak te z mySQL, powodować blokadę gniazda, która następnie wymaga utworzenia nowego gniazda lub usunięcia / przeniesienia istniejącego gniazda przed odtworzeniem nowego jeden.
GeckoSEO,
1
@GeckoSEO Była to żałosna sugestia odnosząca się do niebezpieczeństwa umożliwienia włączenia Ctrl-Alt-Delete na serwerach Linux.
ewwhite
z drugiej strony moja odpowiedź nie była żartobliwa, po prostu próbowałem wyjaśnić odpowiedź tym, którzy próbują rozwiązać to pytanie. Proszę zobaczyć moją wcześniejszą odpowiedź, mam nadzieję, że to pomoże.
GeckoSEO,
2

Używam polecenia „init 6”.

init 6 mówi procesowi init, aby zamknął wszystkie odrodzone procesy / demony zapisane w plikach init (w odwrotnej kolejności, w jakiej zostały uruchomione) i na koniec wywołuje polecenie shutdown -r now, aby ponownie uruchomić komputer.

Więcej informacji można znaleźć na to pytanie .

Itai Ganot
źródło
0

Mam wrażenie, że może ci się nie spodobać ta odpowiedź, ale ta odpowiedź zawiera pewien wgląd, którego nikt nie bierze pod uwagę. . . Ty piszesz:

Zawsze używałem polecenia:

zamknij -r teraz

Czasami jednak powoduje to problemy z MySQL.

Problem w tym, że NIE jest twoją metodą zamykania, jest to oprogramowanie, które nie może poprawnie obsługiwać zamykania; MySql.

JEDYNYM sposobem, w jaki możesz to naprawdę rozwiązać, jest zastąpienie MySql (PostgreSql jest świetnym zamiennikiem) LUB napisanie własnego skryptu zamykającego, który PIERWSZY koduje MySql jak dziecko, a kiedy jest szczęśliwy, że go można zamknąć, TO zamyka system.

... Jako osoba, która specjalizuje się w systemach baz danych od ponad 26 lat, mogę powiedzieć, że dopiero w ostatnim czasie MySql zaczął zbierać informacje na temat kompetencji w najważniejszych aspektach systemów baz danych dla - bezpieczeństwo / integralność danych. Poprzednio zwracali mniejszą uwagę na te aspekty, a większą uwagę na wydajność. Ale jaka jest dobra wydajność w przypadku utraty danych? W NIEKTÓRYCH aplikacjach, takich jak np. Nagrywanie strumieniowe Netflix, w którym momencie oglądasz, absolutna wierność może nie być szczególnie ważna - być może nawet Twoi klienci lubią kopie zapasowe wideo po awarii. Ale w systemie bankowym jest to katastrofa o epickich rozmiarach. Tylko właściciel danych może wiedzieć, co jest dla nich odpowiednie.

Richard T.
źródło
1
Zastąp mysql tylko dlatego, że występują problemy z restartowaniem lub zamykaniem systemu? A ostatnia część rozwiązania nie przyczynia się do rozwiązania problemu osoby, która zadaje pytanie
ftrujillo
Ta odpowiedź jest stronnicza w stosunku do mysql bez źródeł lub referencji. Nie jest to przydatne w kontekście pytania; każde oprogramowanie, którego zamknięcie trwa zbyt długo, może powodować problemy podczas ponownego uruchamiania (szczególnie w przypadku systemd i jego agresywnych limitów czasu).
Harald