Czy jest jakieś polecenie / program, za pomocą którego mogę natychmiast wyłączyć system (od 1 do 5 sekund)?
Aktualizacja (2015): Dziękuję tym, którzy zasugerowali wyłączenie przy użyciu gniazdka elektrycznego. :RE
Aktualizacja (2016): @technophile zasugerował, że powinienem dodać trochę informacji do pytania opisującego naturę problemu - głównie tego, który scenariusz próbowałem rozwiązać. Oto scenariusz, dla którego to pytanie zostało zadane kilka lat temu.
Budowaliśmy system do wdrożenia w miejscach publicznych, takich jak (lotniska, hotele itp.). Ludzie mogą korzystać z tego systemu do surfowania po Internecie, sprawdzania poczty elektronicznej, a nawet rezerwacji itp. Za pomocą kart kredytowych. Zbudowany system upewniał się, że drugi użytkownik nie może w żaden sposób uzyskać informacji (e-mail, karty kredytowe) poprzedniego użytkownika tego systemu, nawet jeśli oprogramowanie typu keyloggery zostanie w jakiś sposób zainstalowane. Jak system to upewniał? Cóż, szczegółów nie można udostępnić, ponieważ nie są to informacje publiczne. ale opracowaliśmy sposób, aby zawsze mieć nowy system operacyjny (tak jakby był nowo zainstalowany) dla nowego użytkownika systemu. Jedynym problemem było to, że musieliśmy wyłączyć maszynę i uruchomić ją ponownie, gdy tylko pierwszy użytkownik opuści maszynę.
I chciałem, aby to zamknięcie było natychmiastowe (to dlatego pytanie), a następne uruchomienie również było bardzo szybkie, dla którego zbadałem i wypróbowałem dużą liczbę dystrybucji Linuksa od Damn Small Linux do Slackware do Debiana itp., Ale to jest osobna historia.
źródło
Odpowiedzi:
źródło
Nie sugeruję wykonywania następujących czynności, jeśli nie jesteś zmuszony z naprawdę szczególnych powodów:
Jest szorstki, brutalny i można go uznać za ścisły odpowiednik odłączenia przewodu zasilającego ...
Poprawny sposób jest
shutdown -h now
zsudo
przed gdy są potrzebne.Może powinienem powiedzieć w sposób zgodny z prawem ; patrz poniżej lub lepiej tl; dr.
Niektóre słowa więcej , aka historii, Rozdział I
Na początku było init i będzie aż do samego końca.
Cały Linux zależy od miłości i troski o pliku init [ 1 ] [ 2 ] . Niemniej jednak i nie bez pewnej niewdzięczności był czas, w którym dobry użytkownik root może zdradzić tę miłość i nagle
kill
zainicjować z niezaprzeczalną (-9
) kolejnością.( Księga etykiety nakazuje hrabiom, książętom i markizom wywoływać użytkowników przed a
sudo
).Następnie niektórzy czarodzieje rzucili urok, aby chronić init (z Księgi
man 2 init
)(Nasz raport szpiegów [ U1 ], że init będzie obsługiwał 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Tak więc dobry użytkownik root uczy się wiadomości i zmienia polecenie
kill -ABRT 1
lubkill -SEGV 1
zwykle generuje panika jądra i zrzut rdzenia.Działa, ponieważ init jest pierwszym uruchomionym procesem i przyjmuje numer PID 1 [ 2b ] .
Jest to niebezpieczne, nierozsądne i czujesz, że to zwiastun złego omenu i klątwy, ale jeśli nie możesz materialnie położyć rąk i odłączyć go od sieci ...
Klątwa : nie zapisze w dzienniku, nie zabije wszystkich procesów i czeka na ich zakończenie, nie zapisze na dysku twardym poprawnie aktualizując i-węzły, ani nie odmontuje systemów plików; nawet nie mam nic przeciwko, że zapisze opcje okien graficznych i historii powłok oraz wiele innych poza naszą wyobraźnią ... jak powiedzieliśmy bliski odpowiednik odłączenia przewodu zasilającego lub baterii w przypadku laptopa.
Prawidłowy sposób
„Non nobis, Domine, non nobis, sed nomini tuo da gloriam.”, Motto templariuszy. Prawem (poprawne) sposobem jest użycie [ 3 ]
shutdown
ale przy tym
-h now
nie będą mieli wystarczająco dużo czasu, aby zrobić tyle ...Kilka słów więcej , aka Historia, rozdział II
Pewnego razu z nieba poczuli się logiczni ludzie nad ludźmi uniksowymi:
Rzeczywiście, w dzisiejszych czasach, nie ufa bardziej w istnienie trzech Moirai [ 5 ] w świecie Linuksa ,
reboot
,poweroff
ihalt
[ 6 ] : the modern science ofls -l $(which poweroff halt reboot)
a jednym zman reboot
spready nowe światło na ten wiek ciemności i ujawnić nam że istnieje tylko jedno prawdziwe polecenie, które analizuje wszystkie opcje, abyśmy mogli wreszcie poprosić o działania sprzeczne z nazwami ich poleceń! (halt -p
lubreboot -p
dlapoweroff
,shutdown -r
dlareboot
...)Teraz, gdy wszystko wydawało się jasne i przytulne dla wszystkich, pogłoski twierdzą, [ 7 ] , że w półświatku od Systemd zestawu narzędzi [ 8 ] rewolucja przeprowadzono pozostawiając nieświadomy całego Nadświecie . Dzięki armii wstecznych podkładek kompatybilności w ogóle nie zauważyliśmy, że ponowne uruchomienie, wyłączenie, zatrzymanie [ 6 ], a nawet telinit [ 9 ] i wyłączenie [ 3 ] są już powiązane z nowym królem systemctl [ 10 ]. Posłuchaj całej historii oryginalnego głosu JdeBP The Bard [ 9 ], ponieważ nie mam już tchu.
Jeśli jesteś wyznawcami kultu Ubuntu, możesz nadal być świadomy tych wszystkich roszczeń [ 11 ] .
Bliski Ziemi
halt -f
,init
,telinit
,systemctl
Poszukiwanie rozwiązania szybciej niż poprawny, ale także mądry.
Jeśli masz system, czy nie, powinieneś być w stanie zatrzymać komputer bez wywoływania wszystkich poprawnych procedur pokazowych (i tak szybciej):
halt -f
: określenie opcji-f
(pamiętaj, że musisz-f
unikać procedury zamykania) za pomocą powyższego polecenia, za pomocą,sudo poweroff -f
a może nawet za pomocąsudo reboot -f -h
. Rzeczywiście możemy przeczytaćman reboot
(i odpowiedniki) o potrzebie określenia opcji-f
unikania wywoływania zamykania:Ponadto możesz użyć
telinit
[ 2b ] (lubinit
bezpośrednio)powiedzieć initowi, żeby zmienił poziom działania ... ale jeśli tak, to dlaczego nie zabić go bezpośrednio?
W systemied możesz użyć niemądrej podwójnej opcji
--force --force
Czytanie z podręcznika systemctl [ 10 ]
Ps> czerp inspirację na temat wariantów z ogona JdeBP The Bard [ 7 ] .
źródło
Możesz natychmiast wyłączyć komputer bez synchronizacji dysków, pisząc „o” w katalogu / proc / sysrq-trigger jako root.
Wyglądałby jak skrypt powłoki
Jeśli masz uprawnienia do / proc / sysrq-trigger, nie musisz włączać go przez sysctl. Ta opcja wpływa tylko na wyzwalanie za pomocą klawiatury.
Nie polecam robić tego na komputerze z dowolnym systemem plików, który chcesz przeczytać później.
Używam tego w Google Compute Engine do uboju szablonów tuż przed upływem dziesięciu minut, aby zmaksymalizować opłacalność zadań w klastrze, działa świetnie.
źródło
b
zamiasto
restartu (istotne, ponieważ pytanie zostało zaktualizowane).Musisz użyć kombinacji klawiszy Magic SysRq
REISUB
.Powtórz za mną: „ Wychowywanie słoni jest tak nudne ... ”
źródło
To powinno działać na większości popularnych dystrybucji. W przeciwieństwie do
shutdown
wielu systemów można to zrobić jako zwykły użytkownik (nie wymaga sudo).Edycja: Dalsza lektura:
shutdown
ipoweroff
na Ubuntuhalt
,shutdown
ipoweroff
na systemach Unixźródło
Zaczerpnięte z innej strony SE:
Alt+ SysRq+ Bto natychmiastowe ponowne uruchomienie, a Alt+ SysRq+ Oto natychmiastowe zamknięcie.
Referencja: tutaj
źródło
Przytrzymaj klawisz zasilania przez około 4 sekundy, jest dość szybki.
źródło
W niektórych dystrybucjach Linuksa zamknięcie oferuje opcję -n. (Zobacz zamknięcie człowieka ). Niektóre dystrybucje (takie jak ubuntu, które używają upstart zamiast sysvinit) nie obsługują jednak jego flagi, a flagi te (jak można dowiedzieć się z manpage) nie są pozbawione ryzyka. Chociaż używam tego od lat (na moim laptopie nie dbam o to, aby wszystkie demony zostały poprawnie zakończone, po prostu chcę, aby wszystko zabito, a pamięć dyskowa została opróżniona) (jest szybsze niż zwykłe zamykanie i bezpieczniejsze niż ciągnięcie wtyczka (i przyjaciele)). Możesz zobaczyć, czy to rozwiąże twój problem.
źródło
Użyłem tego małego skryptu, aby wyłączyć system. W rzeczywistości jest to używane do dowcipu na maszynie do „prototypowania”: „Hej, stary, zobaczmy, co robi ten niesamowity .sh!”
(Ten skrypt naśladuje to samo, co naciśnięcie Alt+ SysRq+ u/ s/, ojak wcześniej wyjaśniono.) Oczywiście nie spowoduję nieprawidłowego zakończenia systemu (tabele mysql itp. Mogą ulec awarii), więc używaj tylko na maszynach zastępczych. Uwaga: synchronizacja może trochę potrwać. Widziałem, że jeśli system ma dużo wolnej pamięci (na pamięć podręczną), a ty skopiujesz kilka plików na pendrive, synchronizacja zajmuje więcej czasu, ale polecam to nawet dla dowcipu.
Edycja: Lepiej jest używać
sync
zamiast zapisywania „do”sysrq-trigger
: pisanie „nie” nie blokuje wykonywania skryptu, więc po zażądaniu zapisania pamięci podręcznej na dysku, urządzenie natychmiast się wyłączy. W przeciwieństwie dosync
polecenia,sync
powróci po zakończeniu procesu pisania. Wykonywanie skryptu będzie blokowane, dopóki nie zostanie zakończone opróżnianie pamięci podręcznej.źródło
SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done