2009-02-26 17 views
8

so che Ubuntu (e Fedora) utilizza Upstart istead del init daemon classica System V (SysVinit).Upstart script chiamante (per inserita USB-drive)

Mi piacerebbe sapere come rilevare quando è stato inserito un USB-drive, montarlo e copiare alcuni file ad esso. Vorrei che Upstart chiamasse il mio script per questo.

Se è possibile vorrei Upstart chiamare la sceneggiatura per un specifica USB-drive, in modo che avrei ricevuto la funzionalità normale per ogni USB-drive tranne il mio "backup istantaneo" USB-drive.

Se Upstart potrebbe inviare la stringa di identificazione dell'unità USB come argomento per il mio script, suppongo che sarebbe la soluzione ideale, dato che sarei in grado di avere la stringa id nel mio script e possibilmente potrebbe fare in modo che lo script gestisca due Unità USB senza molti cambiamenti.

E come un lato nota, Sapete qualsiasi altro sistema ad eccezione di Upstart che gestisce USB-drive, i file system di rete montati e così in un modo carino? (Come SysVinit seems not to.)

risposta

8

upstart non sembra venire con i segnali "dispositivo USB collegato" fuori dalla scatola. Il punto focale finora è stato quello di fare praticamente la stessa cosa di init, e le "fantastiche funzionalità pubblicizzate" sono in futuro.

From the Fedora wiki: "... ottenere Upstart stesso al suo posto ora, anche se funzionerà solo come fa ora SysV, ci consentirà di iniziare una transizione graduale verso questo modello."

Fortunatamente, è possibile implementare il futuro da soli avendo udev eseguire uno script per inviare il segnale di upstart personalizzato in modo upstart può chiamare lo script di backup. Potresti anche chiamare udev direttamente lo script di backup.

udev ha già un modo semplice per eseguire script quando i dispositivi sono collegati e scollegati. Vedi rename your usb hard drive's device name with udev rules. Sul mio sistema, avrei dovuto usare udevadm monitor --env invece del udevmonitor --env del tutorial. Dopo aver seguito il tutorial, è necessario creare un'altra regola udev come questo:

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

Sostituzione ID_SERIAL_SHORT con id effettivo del dispositivo, e $env{NAME} con qualsiasi variabile d'ambiente udev (s) lo script ha bisogno di trovare il dispositivo di backup. Potrebbe essere necessario eseguire lo script in background per evitare di bloccare udev.

Se si desidera utilizzare upstart, si potrebbe avere l'udev regola corsa /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ... e poi scrivere uno script in /etc/event.d che inizia con la linea start on back-it-up.

Vedere anche How can I listen for 'usb device inserted' events in Linux, in Python? per suggerimenti su come fare lo stesso con DBus. DBus potrebbe essere più conveniente se si desidera che l'utente che ha effettuato l'accesso esegua un daemon "watch for backup drive" usermode.

+0

Grazie per la tua risposta informativa! Ho una domanda.Perché non dovrei usare Upstart per questo? (Non hai dato una motivazione.) –

+0

Upstart non sembra fornire i messaggi "usb drive plug-in", quindi potresti definire il tuo con udev (o dbus, o ...), o semplicemente avere udev chiama direttamente il tuo script di backup ed è compatibile con molti altri sistemi Linux. – joeforker

+0

Credo che per il tuo caso d'uso DBus sarebbe la strada da percorrere, poiché probabilmente vorrai che il servizio di backup sia rivolto all'utente. Inoltre, @joforker - ottima risposta! – Guss

4

In Ubuntu 9.10 e versioni più recenti, Upstart ha alcune funzionalità di udev tramite il servizio 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 

Mi piace come può essere semplice ed elegante. Tuttavia, una soluzione DBus potrebbe essere migliore se meno elegante. Con una soluzione DBus è possibile visualizzare notifiche all'utente e fornire un controllo utente semplice.

Problemi correlati