Come disabilitare l'arresto in modo che un processo importante non possa essere interrotto?


10

Qual è il modo più semplice per disabilitare o sospendere temporaneamente il riavvio / arresto quando è in esecuzione un processo importante? Il processo impiega troppo tempo a terminare e non può essere messo in pausa / ripreso, quindi mi piace evitare di spegnere il PC mentre è in esecuzione. Viene eseguito da cron, quindi se non controllo manualmente i processi in esecuzione, non saprei che è in esecuzione. Grazie.


5
Possibile duplicato: SO: impedisce temporaneamente l'arresto di Linux , le risposte suggeriscono i vari livelli su cui ciò può essere fatto, ad esempio script di shell o gestione dell'alimentazione dell'ambiente desktop.
sr_

Non penso che la risposta sia abbastanza specifica senza una spiegazione dei runlevel o un collegamento alla spiegazione. Non è in U&L SE. Posso chiederti quale distro e versione stai usando?
bsd

Invece di modificare la procedura di arresto, scrivere un wrapper in modo che il lavoro indichi che è terminato, sia per posta che per toccare un file. Verificare il completamento del lavoro, quindi eseguire l'arresto. (cron invia l'output dei suoi lavori al proprietario, ma è possibile modificarlo).
bsd

Risposte:


1

Esegui which shutdownper vedere dove si trova il percorso del programma di spegnimento. Puoi rinominare il file, anche se lo sconsiglio.

Un altro metodo (più sicuro). Usa un alias: alias shutdown=' ' qualcosa del genere è più reversibile. Se stai cercando di impedire l'arresto da tutti gli utenti, aggiungi l'alias a livello globale.


Sto pensando di usare un alias, ora devo solo scrivere la mia sceneggiatura. Grazie!
zang3tsu,

Che dire di altri comandi come l'arresto o lo spegnimento. Avresti bisogno di creare alias / rinominarli anche tu?
mintyfreshpenguin,

17

Per i sistemi più recenti con systemd questo è stato risolto da systemd-inhibit. Esempio di utilizzo:

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

Quindi, se un utente tenta di arrestarlo, non sarà consentito se non forzato.

❯ 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'.

C'è questo problema però: eseguendolo come root in modo non interattivo ignorerà i blocchi. github.com/systemd/systemd/issues/2680
Alicia

Penso che tu abbia letto male quella segnalazione di bug, stanno parlando di correre poweroffcome root non interattivo
Ferrybig

Come ho letto correttamente la segnalazione di bug? : S
Alicia,

2

Disabilita i comandi "shutdown / reboot / poweroff / halt / hostname" come nei server mission-critical

chmod 0 /sbin/shutdown

quindi se è necessario utilizzarlo, modificarlo di nuovo in chmod 0755.


1
Che dire halt, poweroffe systemctl poweroff?
Martin Ueding,

1

Disabiliterei il comando nel file / etc / sudoers in modo che solo root possa eseguirlo.

in / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

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

e quando provo ad eseguire il comando:

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

puoi elaborare la tua risposta? l'arresto potrebbe non essere esplicitamente specificato in / etc / sudoers.
Archemar,

Certo, ho modificato la risposta con una spiegazione migliore. Saluti
vmule

0

Volevo impedire a un utente locale di spegnere un laptop durante un aggiornamento. Disabilitare il dispositivo di input era il modo migliore per procedere. Per me è stato sufficiente disabilitare il mouse, ma anche la tastiera può essere disabilitata.

Naturalmente c'è uno svantaggio, il computer non può essere utilizzato durante questo periodo.

Disabilita input tastiera e mouse su unix (sotto X)


-1

shutdownè tecnicamente anche un'applicazione che puoi rimuovere. Corri which shutdown. whichè un comando che mostra il percorso di un'applicazione. Nel mio caso l'output è /sbin/shutdown. È un file quindi puoi semplicemente farlo rm shutdown. Oppure, se si desidera disabilitarlo, copiarlo temporaneamente, modificare il nome e rimuovere il file originale.

È necessario disporre delle autorizzazioni sufficienti se si desidera farlo rm shutdown. È di sola lettura, quindi perché potresti ricevere un errore. Prova a rimuoverlo come rooto se necessario prova a utilizzare il comando rm shutdown.


3
Perché la -rbandiera? Non ne avrai bisogno per un solo file e se digiti male qualcosa, ne conseguirà un disastro.
MadTux,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.