2009-02-26 16 views
8

Sé que Ubuntu (y Fedora) usa Upstart en lugar del clásico daemon System V init (SysVinit).Script de inicio de llamada inicial (para unidad USB insertada)

Me gustaría saber cómo detectar cuándo se ha insertado una unidad USB, montarla y copiar algunos archivos en ella. Me gustaría que Upstart llame a mi propio script para esto.

Si es posible, me gustaría que Upstart llame al script para una unidad USB específica, de modo que obtendría una funcionalidad normal para cada unidad USB, excepto mi unidad USB de "copia de seguridad instantánea".

Si Upstart podría enviar la secuencia de identificación de la unidad USB como argumento a mi script supongo que sería la solución ideal, ya que podría tener la cadena id en mi script y posiblemente podría hacer que el script maneje dos Unidades USB sin mucho cambio.

Y como nota adicional, ¿conoce algún otro sistema, excepto Upstart, que maneje unidades USB, sistemas de archivos montados en red y similares de una manera agradable? (Como SysVinit seems not to.)

Respuesta

8

upstart parece que no viene con señales de "dispositivo usb enchufado" de fábrica. El enfoque hasta ahora ha sido hacer casi exactamente lo mismo que init, y las "fantásticas características publicitadas" están en el futuro.

From the Fedora wiki: "... poner Upstart sí mismo en su lugar ahora, a pesar de que solo funcionará como SysV ahora, nos permitirá comenzar una transición sin problemas hacia este modelo".

Afortunadamente, puede implementar el futuro usted mismo haciendo que udev ejecute una secuencia de comandos para enviar su señal de arranque ad hoc para que advenedizo pueda llamar a su secuencia de comandos de respaldo. También podría hacer que udev llame directamente a su script de copia de seguridad.

udev tiene una manera simple de ejecutar scripts cuando los dispositivos se enchufan y desenchufan. Ver rename your usb hard drive's device name with udev rules. En mi sistema, tendría que usar udevadm monitor --env en lugar del tutorial udevmonitor --env. Después de seguir el tutorial, debe crear otra regla udev como éste:

echo 'SUBSYSTEM=="block", ID_SERIAL_SHORT=="101A9041C67D182E", \ 
NAME="myusbdrive", \ 
RUN+="/my/backup/script $env{NAME}"' > /etc/udev/rules.d/S96-mydrive.rules 

Sustitución ID_SERIAL_SHORT con id real del dispositivo, y $env{NAME} con cualquier variable (s) Entorno de udev su script necesita encontrar el dispositivo de copia de seguridad. Es posible que tenga que hacer un fondo de la secuencia de comandos para evitar el bloqueo de udev.

Si desea utilizar advenedizo, podría hacer que su regla de udev se ejecute /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ... y luego escribir una secuencia de comandos en /etc/event.d comenzando con la línea start on back-it-up.

Consulte también How can I listen for 'usb device inserted' events in Linux, in Python? para obtener sugerencias sobre cómo hacer lo mismo con DBus. DBus podría ser más conveniente si desea que el usuario conectado ejecute un demonio de modo de usuario "reloj para unidad de copia de seguridad".

+0

Gracias por su respuesta informativa! Tengo una pregunta.¿Por qué no debería usar Upstart para esto? (No le dio ninguna motivación.) –

+0

Upstart no parece proporcionar los mensajes de "unidad USB conectada", por lo que puede definir el suyo con udev (o dbus, o ...), o simplemente tener udev llame a su secuencia de comandos de copia de seguridad directamente y sea compatible con muchos más sistemas Linux. – joeforker

+0

Creo que para su caso de uso, DBus sería el camino a seguir, ya que probablemente desee que el servicio de respaldo esté orientado al usuario. Además, @joforker - ¡gran respuesta! – Guss

4

En Ubuntu 9.10 y más reciente Upstart tiene algunas capacidades de udev a través del servicio upstart-udev-bridge.

#thumbdrive_special.conf 
start on block-device-added 

task 

script 
    if [ `blkid $DEV` -eq "YOUR-THUMBDRIVES-UUID" ]; then 
     /home/you/bin/thumbdrive_special $DEV 
    fi 
end script 

Me encanta lo simple y elegante que puede ser el advenedizo. Sin embargo, una solución de DBus podría ser mejor si menos elegante. Con una solución de DBus, puede mostrar notificaciones al usuario y proporcionar un control de usuario fácil.

Cuestiones relacionadas