Jak wyłączyć zamknięcie, aby nie można było przerwać ważnego procesu?


10

Jaki jest najprostszy sposób na wyłączenie lub tymczasowe zawieszenie ponownego uruchomienia / zamknięcia, gdy ważny proces jest uruchomiony? Proces ten trwa zbyt długo i nie można go wstrzymać / wznowić, więc lubię unikać wyłączania komputera podczas jego działania. Jest uruchamiany z crona, więc jeśli nie sprawdzę ręcznie uruchomionych procesów, nie wiedziałbym, że działa. Dzięki.


5
Możliwe duplikaty: SO: Tymczasowo zapobiegaj zamykaniu się Linuksa , odpowiedzi wskazują na różne poziomy, na których można to zrobić, tj. Skrypty powłoki lub zarządzanie energią środowiska pulpitu.
sr_

Nie sądzę, aby odpowiedź była wystarczająco szczegółowa bez wyjaśnienia poziomów pracy lub linku do wyjaśnienia. Nie ma go w U&L SE. Czy mogę zapytać, której dystrybucji i wersji używasz?
bsd

Zamiast modyfikować procedurę zamykania, napisz opakowanie, aby zadanie wskazywało na zakończenie, albo wyślij pocztą, albo dotknij pliku. Sprawdź wykonanie zadania, a następnie uruchom zamknięcie. (cron wysyła wiadomość e-mail z wynikami swoich zadań do właściciela, ale można to poprawić).
bsd

Odpowiedzi:


1

Uruchom, which shutdownaby zobaczyć, gdzie znajduje się ścieżka do programu zamykającego. Możesz zmienić nazwę pliku, choć odradzam go.

Kolejna (bezpieczniejsza) metoda. Użyj aliasu: alias shutdown=' ' Coś takiego jest bardziej odwracalne. Jeśli próbujesz zapobiec zamknięciu systemu przez wszystkich użytkowników, dodaj alias globalnie.


Zastanawiam się nad użyciem aliasu, teraz muszę tylko napisać skrypt. Dzięki!
zang3tsu

Co z innymi poleceniami, takimi jak zatrzymanie lub wyłączenie zasilania. Czy musisz też utworzyć alias / zmienić ich nazwę?
mintyfreshpenguin

17

W nowszych systemach z systemd zostało to rozwiązane przez systemd-inhibit. Przykład użycia:

systemd-inhibit --why="Doing weekly backup" bash my-backups.sh

Następnie, jeśli użytkownik spróbuje zamknąć system, nie będzie dozwolony, chyba że zostanie wymuszony.

❯ systemctl poweroff
Operation inhibited by "bash my-backups.sh" (PID 2414 "systemd-inhibit", user ntrrgc),
reason is "Doing weekly backup".
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.

Jest jednak ten problem: uruchomienie go jako root nieinteraktywnie zignoruje blokady. github.com/systemd/systemd/issues/2680
Alicia,

Myślę, że źle odczytałeś ten raport o błędzie, oni mówią o uruchomieniu poweroffjako root nieinteraktywny
Ferrybig

Jak dokładnie odczytałem raport o błędzie? : S
Alicia,

2

Wyłącz „shutdown / reboot / poweroff / halt / hostname” jak polecenia na serwerach o znaczeniu krytycznym

chmod 0 /sbin/shutdown

to jeśli chcesz go użyć, chmod to z powrotem do chmod 0755.


1
Co o halt, poweroffi systemctl poweroff?
Martin Ueding,

1

Wyłączę polecenie w pliku / etc / sudoers, aby tylko root mógł je wykonać.

w / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
vmule   ALL=(ALL:ALL) ALL, !SHUTDOWN

a kiedy próbuję uruchomić polecenie:

vmule@debian:~$ sudo /sbin/shutdown  -r now
Sorry, user vmule is not allowed to execute '/sbin/shutdown -r now' as root on debian.vm

czy możesz opracować swoją odpowiedź? zamknięcie nie może być wyraźnie określone w / etc / sudoers.
Archemar

Jasne, zredagowałem odpowiedź z lepszym wyjaśnieniem. Pozdrawiam
vmule


-1

shutdownjest technicznie aplikacją, którą można usunąć. Uruchom which shutdown. whichto polecenie, które pokazuje ścieżkę aplikacji. W moim przypadku wynikiem jest /sbin/shutdown. To plik, więc możesz to zrobić rm shutdown. Lub jeśli chcesz go tymczasowo wyłączyć, zmień nazwę i usuń oryginalny plik.

Musisz mieć wystarczające uprawnienia, jeśli chcesz rm shutdown. Jest tylko do odczytu, dlatego może pojawić się błąd. Spróbuj usunąć go w rootrazie potrzeby lub użyj polecenia rm shutdown.


3
Dlaczego -rflaga? Nie potrzebujesz go do jednego pliku, a jeśli coś pomylisz, nastąpi katastrofa.
MadTux,
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.