Upstart roteiro chamando (para inserido USB-drive)
Pergunta
Eu sei que o Ubuntu (e Fedora) usa Upstart istead do clássico System V Init daemon (SysVinit) .
Eu gostaria de saber como detectar quando um drive USB foi inserido, montá-lo e copiar alguns arquivos para ele. Gostaria Upstart para chamar de meu roteiro para isso.
Se for possível, gostaria Upstart para chamar o script para um específica USB-drive, para que gostaria de obter funcionalidade normal para cada USB-drive, exceto o meu "backup instantâneo" USB-drive .
Se Upstart poderia enviar a string de identificação do drive USB como um argumento para o meu script eu acho que seria a solução ideal, como eu seria capaz de ter a string id no meu script e, possivelmente, poderia fazer a alça roteiro dois USB -drives sem muita mudança.
E como uma nota lateral, você sabe qualquer outro sistema, exceto Upstart que lida com USB-drives, rede de sistemas de arquivos montados e tal em um bom caminho? (Como SysVinit não parece .)
Solução
upstart
não parece vir com "dispositivo USB conectado" sinais fora da caixa. O foco tem sido até agora a fazer muito bonito exatamente a mesma coisa que o init, eo "arrefecer características anunciadas" são no futuro.
Desde o Fedora wiki :" ... obtendo-se Upstart no lugar agora , embora ela só vai estar funcionando como SysV faz agora, vai permitir-nos para começar uma transição suave para este modelo ".
Felizmente, você pode implementar o futuro se por ter udev executar um script para enviar seu sinal arrivista personalizado para iniciante pode chamar seu script de backup. Você também pode ter udev chamar seu script de backup diretamente.
udev
já tem uma maneira simples de executar scripts quando os dispositivos estão conectados e desconectados. Consulte renomeação nome do dispositivo seu usb disco rígido com udev regras . No meu sistema, eu teria que usar udevadm monitor --env
vez de udevmonitor --env
do tutorial. Depois de seguir o tutorial, você criaria outra regra udev como este:
echo 'SUBSYSTEM=="block", ID_SERIAL_SHORT=="101A9041C67D182E", \
NAME="myusbdrive", \
RUN+="/my/backup/script $env{NAME}"' > /etc/udev/rules.d/S96-mydrive.rules
Substituir ID_SERIAL_SHORT
com id real do seu dispositivo e $env{NAME}
com qualquer ambiente udev variável (s) suas necessidades de script para encontrar o dispositivo de backup. Você pode precisar de fundo o script para evitar o bloqueio udev.
Se você quiser usar arrivista, você poderia ter sua regra udev prazo /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ...
e, em seguida, escrever um script em /etc/event.d
começando com o start on back-it-up
linha.
Veja também Como Eu posso ouvir 'dispositivo usb inseridos' eventos em Linux, em Python? para obter dicas sobre como fazer o mesmo com DBus . DBus pode ser mais conveniente se você quiser ter a sessão iniciada executar um "relógio para unidade de backup" usermode daemon.
Outras dicas
No Ubuntu 9.10 e mais recentes Upstart tem alguns recursos udev através do serviço 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
Eu amo como simples e arrivista elegante pode ser. No entanto, uma solução DBus poderia ser melhor se menos elegante. Com uma solução de DBus você poderia aparecer notificações para o usuário e fornecer controle de usuário fácil.