запуск скрипта при извлечении флешки

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

запуск скрипта при извлечении флешки

Сообщение zshgm »

Ось Debian etch, KDE..
При подключении флешки можно вызвать исполняемый скрипт, запихав
/etc/udev/rules.d
правило типа:
KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="add", RUN="/root/test.sh"
срабатывает нормально.
Вопрос: почему не работает если добавить:
KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/root/test_remove.sh"
?? в чем косяк?
Можно ли вообще отловить данное событие - как извлечение флешки?
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
Аватара пользователя
Minton
Сообщения: 1588
Статус: openSUSE Localization Team
ОС: openSUSE Tumbleweed x86-64

Re: запуск скрипта при извлечении флешки

Сообщение Minton »

Тут куча вариантов: уверены ли вы, что событие называется remove? Уверены ли вы, что во втором случае надо писать +=, а не =, как в первом? А скрипт этот точно исполняемый?
Русский раздел на forums.opensuse.org :)

"Настоящие мужчины используют поиск" ©Goodvin
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: запуск скрипта при извлечении флешки

Сообщение zshgm »

Minton писал(а):
15.06.2009 13:16
Тут куча вариантов: уверены ли вы, что событие называется remove?


с помощью udevmonitor --env
при вытаскивании флешки вижу (действие remove происходит):
UDEV [1245059664.359228] remove@/block/sdb
UDEV_LOG=3
ACTION=remove
DEVPATH=/block/sdb
SUBSYSTEM=block
SEQNUM=1267
MINOR=16
MAJOR=8
PHYSDEVPATH=/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0/host12/target12:0:0/12:0:0:0
PHYSDEVBUS=scsi
PHYSDEVDRIVER=sd
UDEVD_EVENT=1
ID_VENDOR=JetFlash
ID_MODEL=Transcend_32GB
ID_REVISION=8.07
ID_SERIAL=JetFlash_Transcend_32GB_4JRWAUI1
ID_TYPE=disk
ID_BUS=usb
ID_PATH=pci-0000:00:1d.7-usb-0:7:1.0-scsi-0:0:0:0
DEVLINKS=/dev/disk/by-id/usb-JetFlash_Transcend_32GB_4JRWAUI1 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:7:1.0-scsi-0:0:0:0
DEVNAME=/dev/sdb


Minton писал(а):
15.06.2009 13:16
Уверены ли вы, что во втором случае надо писать +=, а не =, как в первом?

комбинировал различные варианты, событие add срабатывает всегда, а remove -никогда : /

Minton писал(а):
15.06.2009 13:16
А скрипт этот точно исполняемый?


скрипт исполняемый, точно такой же скрипт(с другим именем) успешно выполняется при подключении флешки
-rwxr-xr-x 1 root root 48 2009-06-15 14:04 test_remove.sh
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
Аватара пользователя
Mage-Warrior
Сообщения: 869
Статус: Семь раз понюхай, один раз откуси!
ОС: SlackWare 12.1

Re: запуск скрипта при извлечении флешки

Сообщение Mage-Warrior »

Покажите содержимое обоих скриптов.
Кстати говоря, в мануале по udev сказано, что если в параметре RUN используется shell-скрипт, то обязательно нужно указать первой строкой в этом скрипте оболочку, которая будет его выполнять:

Код: Выделить всё

#!/bin/sh
*- Большинство проблем, дружок, завсегда покажет лог! -*
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: запуск скрипта при извлечении флешки

Сообщение komcumir »

zshgm писал(а):
15.06.2009 11:54
Можно ли вообще отловить данное событие - как извлечение флешки?

отловить можно
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: запуск скрипта при извлечении флешки

Сообщение zshgm »

Mage-Warrior писал(а):
15.06.2009 15:11
Покажите содержимое обоих скриптов.
Кстати говоря, в мануале по udev сказано, что если в параметре RUN используется shell-скрипт, то обязательно нужно указать первой строкой в этом скрипте оболочку, которая будет его выполнять:

Код: Выделить всё

#!/bin/sh


скрипт 1:
#!/bin/bash
echo "test" >> 1111111111.txt

скрипт 2:
#!/bin/bash
echo "test" >> 2222222222.txt

Если я во втором случае ставлю add - то все выполняется на ура... если remove - то скрипт вообще не выполняется. Такое впечатление что не отлавливается событие.. : /

пробывал все варианты тусовать add потом remove или remove потом add и т.д.
вообщем add - событие происходит, remove - нет (

komcumir писал(а):
15.06.2009 15:19
zshgm писал(а):
15.06.2009 11:54
Можно ли вообще отловить данное событие - как извлечение флешки?

отловить можно


Как? Только средствами udev или нет?
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
ekkl
Сообщения: 139
ОС: 3.17.3-300.fc21.x86_64

Re: запуск скрипта при извлечении флешки

Сообщение ekkl »

KERNEL=="sd*", ACTION=="remove", RUN+="/root/test_remove.sh" ? без usb?
dd if=/dev/zero of=/dev/null bs=1M
И пусть весь мир подождет.....
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: запуск скрипта при извлечении флешки

Сообщение sciko »

А может событие называется unmount? Или umount.
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: запуск скрипта при извлечении флешки

Сообщение komcumir »

zshgm писал(а):
15.06.2009 15:49
Как? Только средствами udev или нет?

у меня стоит ivman он работает с hal можно через ivman повесить (у меня он и монтирует и размонтирует при этом выполняются внешние скрипты), можно через hal но тут могу подсказать только какое свойство отслеживать, а как до него добраться не в курсе...
Спасибо сказали:
o6s
Сообщения: 187

Re: запуск скрипта при извлечении флешки

Сообщение o6s »

udev-rule

Код: Выделить всё

1 KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="add", RUN="/root/test.sh"
 2 BUS=="usb", SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="remove", RUN+="/root/testr.sh"

При обоих условиях скрипт будет выполняться 2-а раза.
Спасибо сказали:
Blitz
Сообщения: 40
ОС: Archlinux

Re: запуск скрипта при извлечении флешки

Сообщение Blitz »

Когда-то у меня работало такое правило udev
/etc/udev/rules.d/50-usb-block.rules

Код: Выделить всё

# First rule
BUS=="usb", SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="add", NAME="%k", RUN+="/etc/udev/usb-automount.sh add %k"
# Second rule
BUS=="usb", SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="remove", RUN+="/etc/udev/usb-automount.sh remove %k"


usb-automount.sh дальше посылал команду DBUS/HAL для монтирования флешки. Правило для remove я потом убрал, т.к. /dev/sdХ уже не существовало на момент получения управления, устройство размонировалось само, папка удалялась HAL-ом.

А потом я сделал такой python-скрипт, которым сейчас пользуюсь. Для KDE, которое не монтирует флешки автоматом, самое-то.
Ubuntu on Acer Aspire 7520 (AMD Turion 64, GeForce 8400MG), в прошлом Arch
Спасибо сказали:
Аватара пользователя
zshgm
Сообщения: 311
ОС: Debian

Re: запуск скрипта при извлечении флешки

Сообщение zshgm »

ekkl писал(а):
15.06.2009 16:46
KERNEL=="sd*", ACTION=="remove", RUN+="/root/test_remove.sh" ? без usb?


Спасибо! сработало!!! :) а в чем была причина? тоесть при подключении udev видел как usb устройство а при отключении уже нет?

zshgm писал(а):
15.06.2009 11:54
Ось Debian etch, KDE..
При подключении флешки можно вызвать исполняемый скрипт, запихав
/etc/udev/rules.d
правило типа:
KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="add", RUN="/root/test.sh"
срабатывает нормально.
Вопрос: почему не работает если добавить:
KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/root/test_remove.sh"
?? в чем косяк?
Можно ли вообще отловить данное событие - как извлечение флешки?


Правильно оказалось без SUBSYSTEMS=="usb"
KERNEL=="sd*", ACTION=="remove", RUN+="/root/test_remove.sh"
как подсказал ekkl, за что ему огромное спасибо :)
остальным спасибо за участие! :)
тему можно закрывать..
newblog.kz - заработай на своих статьях :)
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: запуск скрипта при извлечении флешки

Сообщение komcumir »

Blitz писал(а):
15.06.2009 21:54
Для KDE, которое не монтирует флешки автоматом, самое-то.

кде не монтирует флешки автоматом? это что то новенькое
Спасибо сказали: