Domanda

So che Ubuntu (e Fedora) utilizza Upstart istead del init daemon classica System V (SysVinit) .

Mi piacerebbe sapere come rilevare quando è stato inserito un USB-drive, montarlo e copiare alcuni file ad esso. Vorrei Upstart di chiamare il mio proprio 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 USB-drive come argomento per il mio script Credo che sarebbe la soluzione ideale, come vorrei essere in grado di avere la stringa id nel mio script e, eventualmente, potrebbe fare lo script gestire due USB -drives senza cambiare molto.

E come un lato nota, si fa a sapere qualsiasi altro sistema ad eccezione di Upstart che gestisce USB-drive, montate i file system di rete e così via in modo piacevole? (Come SysVinit non sembra .)

È stato utile?

Soluzione

upstart non sembra venire con "dispositivo USB collegato" segnali fuori dalla scatola. L'attenzione finora è stato quello di fare più o meno esattamente la stessa cosa di init, e le "caratteristiche fredde pubblicizzati" sono in futuro.

Dal Fedora wiki :" ... ottenere Upstart stessa in atto ora , anche se sarà funzionano solo come SysV fa ora, ci permetterà di iniziare una transizione graduale verso questo modello ".

Per fortuna, è 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. Si potrebbe anche avere udev chiamare direttamente lo script di backup.

udev ha già un modo semplice per eseguire script quando i dispositivi sono collegati e scollegati. Vedi rinominare il nome del dispositivo del disco rigido USB con udev regole . Sul mio sistema, avrei dovuto usare udevadm monitor --env invece di 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

La 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 sfondo lo script per evitare di bloccare udev.

Se si desidera utilizzare upstart, si potrebbe avere la regola udev 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.

Come posso ascoltare 'dispositivo USB inserito' eventi in Linux, in Python? per i suggerimenti a fare lo stesso con DBus . DBus potrebbe essere più conveniente se si vuole avere l'utente collegato eseguire un usermode "guardare per unità di backup" daemon.

Altri suggerimenti

In Ubuntu 9.10 e più recenti Upstart ha alcune funzionalità di udev attraverso 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 upstart semplice ed elegante, può essere. Tuttavia, una soluzione di D-Bus potrebbe essere migliore se meno elegante. Con una soluzione DBus si potrebbe pop-up notifiche per l'utente e fornire il controllo utente semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top