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.

zang3tsu
źródło
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.

Emil
źródło
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'.
Alicia
źródło
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.

Danny
źródło
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
Vmule
źródło
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
0

Chciałem uniemożliwić lokalnemu użytkownikowi wyłączenie laptopa podczas aktualizacji. Wyłączenie urządzenia wejściowego było najlepszym sposobem. Dla mnie wystarczyło wyłączyć mysz, ale klawiaturę można również wyłączyć.

Oczywiście istnieje wada, w tym okresie nie można korzystać z komputera.

Wyłącz wprowadzanie z klawiatury i myszy na Uniksie (poniżej X)

Daniel F.
źródło
-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.

William Edwards
źródło
3
Dlaczego -rflaga? Nie potrzebujesz go do jednego pliku, a jeśli coś pomylisz, nastąpi katastrofa.
MadTux,