Скрипт вызова Upstart (для вставленного USB-накопителя)

StackOverflow https://stackoverflow.com/questions/589841

Вопрос

Я знаю, что Ubuntu (и Fedora) использует Выскочка вместо классического демона инициализации System V (SysVinit).

Я хотел бы знать, как определить, когда USB-накопитель вставлен, смонтировать его и скопировать на него некоторые файлы.Я бы хотел, чтобы Upstart вызывал для этого мой собственный скрипт.

Если это возможно, я бы хотел, чтобы Upstart вызывал сценарий для специфический USB-накопитель, чтобы я получил нормальную функциональность для каждого USB-накопителя, кроме моего USB-накопителя «мгновенного резервного копирования».

Если бы Upstart мог отправить строку идентификации USB-накопителя в качестве аргумента моему сценарию, я думаю, это было бы идеальным решением, поскольку я мог бы иметь строку идентификатора в своем сценарии и, возможно, мог бы заставить сценарий обрабатывать два USB-накопителя без много перемен.

И кстати, знаете ли вы какую-нибудь другую систему, кроме Upstart, которая хорошо обрабатывает USB-накопители, сетевые файловые системы и тому подобное?(Как SysVinit, кажется, нет.)

Это было полезно?

Решение

upstart похоже, из коробки не подается сигнал «USB-устройство подключено».До сих пор основное внимание уделялось тому, чтобы делать почти то же самое, что и init, а «крутые рекламируемые функции» ждут в будущем.

Из вики Fedora:«...установление самого Upstart сейчас, даже несмотря на то, что сейчас он будет функционировать только так же, как SysV, позволит нам начать плавный переход к этой модели».

К счастью, вы можете реализовать будущее самостоятельно, запустив udev сценарий для отправки вашего пользовательского сигнала выскочки, чтобы выскочка могла вызвать ваш сценарий резервного копирования.Вы также можете напрямую вызвать сценарий резервного копирования udev.

udev уже есть простой способ запуска сценариев при подключении и отключении устройств.Видеть переименуйте имя устройства вашего жесткого диска USB с помощью правил udev.В моей системе мне пришлось бы использовать udevadm monitor --env вместо учебника udevmonitor --env.После выполнения руководства вы создадите еще одно правило udev, подобное этому:

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

Замена ID_SERIAL_SHORT с фактическим идентификатором вашего устройства и $env{NAME} с любыми переменными среды udev, которые нужны вашему сценарию для поиска устройства резервного копирования.Возможно, вам придется создать фоновый сценарий, чтобы избежать блокировки udev.

Если вы хотите использовать выскочку, вы можете запустить правило udev. /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ... а затем напишите скрипт в /etc/event.d начиная с линии start on back-it-up.

Смотрите также Как я могу прослушивать события «вставлено USB-устройство» в Linux, в Python? за подсказки о том, как сделать то же самое с ДБус.DBus может быть более удобным, если вы хотите, чтобы вошедший в систему пользователь запускал демон «наблюдение за резервным диском» в пользовательском режиме.

Другие советы

В Ubuntu 9.10 и более поздних версиях Upstart имеет некоторые возможности udev через 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

Мне нравится, насколько простым и элегантным может быть выскочка.Однако решение DBus может быть лучше, хотя и менее элегантным.С помощью решения DBus вы можете отображать всплывающие уведомления для пользователя и обеспечивать простой пользовательский контроль.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top