¿Cómo deshabilitar el apagado para que un proceso importante no se pueda interrumpir?

10

¿Cuál es la forma más sencilla de deshabilitar o suspender temporalmente el reinicio / apagado cuando se está ejecutando un proceso importante? El proceso tarda demasiado en finalizar y no se puede pausar / reanudar, por lo que me gusta evitar apagar la PC mientras se está ejecutando. Se ejecuta desde cron, así que a menos que compruebe manualmente los procesos en ejecución, no sabría que se está ejecutando. Gracias.

zang3tsu
fuente
55
Posible duplicado: SO : Evita temporalmente que Linux se apague , las respuestas sugieren los distintos niveles en los que se puede hacer esto, es decir, los scripts de shell o la administración de energía del entorno de escritorio.
sr_
No creo que la respuesta sea lo suficientemente específica sin una explicación de los niveles de ejecución o un enlace a la explicación. No está en el U&L SE. ¿Puedo preguntar qué distribución y versión estás usando?
bsd
En lugar de modificar el procedimiento de apagado, escriba un contenedor para que el trabajo indique que ha finalizado, ya sea por correo o toque un archivo. Pruebe la finalización del trabajo, luego ejecute el apagado. (cron envía por correo la salida de sus trabajos al propietario, pero eso puede modificarse).
bsd

Respuestas:

1

Ejecute which shutdownpara ver dónde está la ruta al programa de apagado. Puede cambiar el nombre del archivo, aunque recomiendo no hacerlo.

Otro método (más seguro). Use un alias: alias shutdown=' ' algo como esto es más reversible. Si está intentando evitar el cierre de todos los usuarios, agregue el alias globalmente.

Emil
fuente
Estoy pensando en usar un alias, ahora solo tengo que escribir mi guión. ¡Gracias!
zang3tsu
¿Qué pasa con otros comandos como detener o apagar? ¿Necesitaría crear alias '/ cambiarles el nombre también?
mintyfreshpenguin
17

Para los sistemas más nuevos con systemd esto ha sido resuelto por systemd-inhibit. Ejemplo de uso:

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

Luego, si un usuario intenta cerrar, no se permitirá a menos que sea forzado.

❯ 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
fuente
Sin embargo, existe este problema: ejecutarlo como root de forma no interactiva ignorará los bloqueos. github.com/systemd/systemd/issues/2680
Alicia
Creo que leíste mal ese informe de error, están hablando de ejecutarse poweroffcomo root no interactivo
Ferrybig
¿Cómo leí mal el informe de error exactamente? : S
Alicia
2

Deshabilite los comandos de "apagado / reinicio / apagado / apagado / nombre de host" en los servidores de misión crítica

chmod 0 /sbin/shutdown

entonces, si necesita usarlo, vuelva a cambiarlo a chmod 0755.

danny
fuente
1
¿Qué pasa con halt, poweroffy systemctl poweroff?
Martin Ueding
1

Deshabilitaría el comando en el archivo / etc / sudoers para que solo root pueda ejecutarlo.

en / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

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

y cuando trato de ejecutar el 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
vmule
fuente
¿Puedes elaborar tu respuesta? el apagado puede no especificarse explícitamente en / etc / sudoers.
Archemar
Claro, edité la respuesta con una mejor explicación. Saludos
vmule
0

Quería evitar que un usuario local apague una computadora portátil durante una actualización. Deshabilitar el dispositivo de entrada era la mejor manera de hacerlo. Para mí fue suficiente deshabilitar el mouse, pero el teclado también se puede deshabilitar.

Por supuesto, hay un inconveniente, la computadora no se puede usar durante este período.

Desactivar entrada de teclado y mouse en unix (bajo X)

Daniel F
fuente
-1

shutdowntécnicamente también es una aplicación, que puedes eliminar. Ejecutar which shutdown. whiches un comando que le muestra la ruta de una aplicación. En mi caso, la salida es /sbin/shutdown. Es un archivo, así que puedes hacerlo rm shutdown. O si desea deshabilitarlo, cópielo temporalmente, cambie el nombre y elimine el archivo original.

Debe tener los permisos suficientes si desea hacerlo rm shutdown. Es de solo lectura, por lo tanto, es posible que obtenga un error. Intente eliminarlo rooto, si es necesario, intente usar el comando rm shutdown.

William Edwards
fuente
3
¿Por qué la -rbandera? No lo necesitará para un archivo, y si escribe mal algo, se produce un desastre.
MadTux