2009-02-26 32 views
8

Je sais que Ubuntu (et Fedora) utilise Upstart avant le démon initial System V init (SysVinit).Script d'appel Upstart (pour lecteur USB inséré)

Je voudrais savoir comment détecter quand une clé USB a été insérée, montez-la et copiez-y des fichiers. Je voudrais que Upstart appelle mon propre script pour ça.

Si possible, je voudrais que Upstart appelle le script pour un lecteur USB spécifique, de sorte que j'aurais une fonctionnalité normale pour chaque clé USB sauf ma clé USB "sauvegarde instantanée". Si Upstart pouvait envoyer la chaîne d'identification du lecteur USB comme argument à mon script, je suppose que ce serait la solution idéale, car je pourrais avoir la chaîne id dans mon script et éventuellement faire en sorte que le script gère deux USB-drives sans beaucoup de changement.

Et en note, connaissez-vous un autre système, à l'exception de Upstart, qui gère les clés USB, les systèmes de fichiers montés sur le réseau, et ainsi de suite? (Comme SysVinit seems not to.)

Répondre

8

upstart ne semble pas venir avec des signaux "périphérique USB branché" hors de la boîte. L'objectif jusqu'ici a été de faire à peu près exactement la même chose que init, et les «fonctionnalités annoncées cool» sont dans le futur. «... Le fait de se mettre en place dès maintenant, même s'il ne fonctionnera que comme SysV, nous permettra d'amorcer une transition en douceur vers ce modèle». Heureusement, vous pouvez implémenter le futur vous-même en demandant à udev d'exécuter un script pour envoyer votre signal de démarrage personnalisé afin que upstart puisse appeler votre script de sauvegarde. Vous pouvez également demander à udev d'appeler votre script de sauvegarde directement.

udev a déjà un moyen simple d'exécuter des scripts lorsque les périphériques sont branchés et débranchés. Voir rename your usb hard drive's device name with udev rules. Sur mon système, je devrais utiliser udevadm monitor --env au lieu du tutoriel udevmonitor --env. Après avoir suivi le tutoriel, vous devez créer une autre règle udev comme celui-ci:

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

Remplacement ID_SERIAL_SHORT avec l'identifiant réel de votre appareil, et $env{NAME} avec toute variable d'environnement udev (s) a besoin de votre script pour trouver le périphérique de sauvegarde. Vous devrez peut-être mettre le script en arrière-plan pour éviter de bloquer udev. Si vous voulez utiliser upstart, vous pouvez faire exécuter votre règle udev /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ... puis écrire un script au /etc/event.d en commençant par la ligne start on back-it-up.

Voir également How can I listen for 'usb device inserted' events in Linux, in Python? pour obtenir des conseils sur la manière de faire la même chose avec DBus. DBus peut être plus pratique si vous souhaitez que l'utilisateur connecté exécute un démon username "watch for backup drive".

+0

Merci pour votre réponse informative! J'ai une question.Pourquoi ne devrais-je pas utiliser Upstart pour cela? (Vous n'avez pas donné de motivation.) –

+0

Upstart ne semble pas fournir les messages "lecteur USB connecté", donc vous pouvez soit définir votre propre avec udev (ou dbus, ou ...), ou simplement avoir udev appelez votre script de sauvegarde directement et soyez compatible avec beaucoup plus de systèmes Linux. – joeforker

+0

Je crois que pour votre cas d'utilisation, DBus est la solution, car vous voulez probablement que le service de sauvegarde soit orienté utilisateur. Aussi, @joforker - bonne réponse! – Guss

4

Sous Ubuntu 9.10 et versions ultérieures, Upstart offre des fonctionnalités udev via le service 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 

J'aime la facilité et la simplicité de l'upstart. Cependant, une solution DBus pourrait être meilleure si elle est moins élégante. Avec une solution DBus, vous pouvez afficher des notifications à l'utilisateur et permettre un contrôle aisé de l'utilisateur.