2008-11-26 28 views
11

Tengo un script de copia de seguridad que se ejecuta diariamente en segundo plano en mi computadora Linux (Fedora 9). Si la computadora se apaga mientras la copia de seguridad está en curso, la copia de seguridad puede dañarse, por lo que me gustaría escribir una pequeña secuencia de comandos que deshabilite temporalmente la capacidad del usuario para reiniciar o apagar la computadora.Evita temporalmente que se apague Linux

No es necesario que la secuencia de comandos no se pueda eludir, solo para que los usuarios del sistema sepan que la copia de seguridad está en progreso y que no deben cerrarse. He visto el método Inhibir en la especificación de administración de energía de escritorio DBus Free: http://people.freedesktop.org/~hughsient/temp/power-management-spec-0.3.html pero eso solo evita las paradas si el sistema está inactivo, no explícitamente a petición de los usuarios.

¿Hay una manera fácil de hacer esto en C/Python/Perl o bash?

Actualización: Para aclarar la pregunta anterior, es una máquina con varios usuarios, pero que la usa secuencialmente a través del teclado/mouse conectado. No estoy buscando un sistema que me impida "piratearlo" como root. Pero una secuencia de comandos que me recordaría (u otro usuario) que la copia de seguridad aún se está ejecutando cuando elijo apagar desde los menús de Gnome/GDM

+0

, sería útil si pudieras decir si es un escritorio o un servidor como lo sugiere @adjuster. – Brabster

Respuesta

1

Más una solución de arranque que una completa, podría alias el apagado comando de distancia, y luego utilizar un script como

#!/bin/sh 
ps -ef|grep backupprocess|grep -v grep > /dev/null 
if [ "$?" -eq 0 ]; then 
echo Backup in progress: aborted shutdown 
exit 0 
else 
echo Backup not in progress: shutting down 
shutdown-alias -h now 
fi 

guardado en la ruta del usuario como apagado. Espero que haya alguna variación dependiendo de cómo los usuarios invocan el apagado (iconos del administrador de Windows/línea de comandos) y quizás también para diferentes distribuciones.

+1

que no siempre funcionará, porque en muchos casos el cierre se realiza directamente, es decir,/sbin/shutdown –

0

No puedo evitar sentir que no estás asimilando la metáfora de Unix, y lo que estás pidiendo es un error.

Si un usuario se ejecuta como root, no hay nada que la raíz pueda hacer para evitar que root cierre el sistema. Puedes hacer cosas como ocultar la interfaz de usuario de apagado, pero eso no está logrando nada.

No puedo decir si se trata de esto en el contexto de una máquina multiusuario, o una máquina que se usa como "PC de escritorio" con un solo usuario sentado en una consola. Si es el primero, sus usuarios realmente no deberían tener acceso a la máquina con credenciales que pueden apagar el sistema para las actividades cotidianas. Si es el último, recomendaría educar a los usuarios para que (a) verifiquen si el script se está ejecutando, o (b) use un script de cierre en particular que designe que verifique el proceso del guión y se rehúse a cerrarlo hasta que desaparezca.

+0

Considere la posibilidad de una actualización de firmware en un entorno multiusuario, donde los procesos aleatorios pueden reiniciar su sistema por algún motivo. Es posible que desee agregar un control adicional. –

7

Otra solución para comenzar: durante el cierre, el sistema ejecuta los scripts en /etc/init.d/ (o realmente, un script en /etc/rc.*/, pero se entiende la idea). Puede crear una secuencia de comandos en ese directorio que verifique el estado de su copia de seguridad y las demoras se cierren hasta que la copia de seguridad finalice. O mejor aún, interrumpe con gracia tu copia de seguridad.

El superusuario podría solucionar este script (con/sbin/halt, por ejemplo), pero no se puede evitar que el superusuario haga cualquier cosa si su mente está realmente decidida a hacerlo.

4

Hay molly-guard para evitar shutdows accidentales, se reinicia etc.hasta que se cumplan todas las condiciones requeridas, las condiciones se pueden autodefinir.

Como ya se ha sugerido, también puede realizar operaciones de copia de seguridad como parte del proceso de apagado. Ver por ejemplo this page.

0

Pero un guión que yo (u otro usuario) que la copia de seguridad sigue funcionando cuando seleccione Apagar desde el menú de Gnome/GDM

Uno puede utilizar polkit para bloquear completamente recordaría apagado/reiniciar, pero no pude encontrar el método que proporcionaría una respuesta clara por qué está bloqueado.

Añadiendo las siguientes líneas como /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla obras:

[Disable lightdm PowerMgmt] 
Identity=unix-user:* 
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions 
ResultAny=no 
ResultInactive=no 
ResultActive=no 

Aún puedes ver un diálogo de confirmación pero no hay botones para confirmar. Se ve feo, pero funciona;)

Desafortunadamente, esto se aplica a todos los usuarios, no solo a la sesión lightdm, por lo que debe agregar una segunda regla para ponerla en lista blanca si lo desea.

Tenga en cuenta que este método bloquea únicamente los comandos reiniciar/etc emitidos desde la GUI. Para bloquear comandos de reinicio/etc desde la línea de comandos, se puede usar molly-guard, como se explica en https://askubuntu.com/questions/17187/disabling-shutdown-command-for-all-users-even-root-consequences/17255#17255

Cuestiones relacionadas