Як перевірити, чи запускається правило udev?


16

Я намагаюся познайомитись з udev, під Ubuntu 13.10.

Ось моє перше просте правило 95.usbbackup.rules:

ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"

і ось скрипт (який був chmodded + x) my_backup.sh:

#!/bin/bash
touch /tmp/test

Нічого не відбувається, коли я підключаю зовнішні накопичувачі. Як я можу перевірити (журнал, команда, що-небудь), якщо правило запущено?

Дуже дякую


2
Я думаю, ти маєш на увазі SUBSYSTEMS=="usb". Тобто подвійний, ==який перевіряє рівність, а не одиничний, =який присвоює значення ключу.
Lqueryvg

Відповіді:


5

Я впевнений, що це має працювати. Ви перезавантажили правила udev після редагування правил?

udevadm control --reload-rules && udevadm trigger як корінь.


Я зробив більш вузьке правило: KERNEL == "sdb", яке працює. Удев розглядає лише правила, які однозначно визначають певне обладнання?
пузлер

Ні, спробуйте, KERNEL!="sdz*"і ви повинні отримати все (крім sdz [1-9])
Redsandro

5
Це насправді не відповідає на питання. Як дізнатися, чи спрацьовують правила?
DanielSank

1
Ви знаєте, оскільки сценарій запускається. Ви можете змусити його записувати в лог-файл. Такожudevadm monitor
Редсандро

2

Ви можете дати команду як корінь, як це:

монітор udevadm

Він покаже, коли правило запущено.


11
udevadm monitorпросто показує події udev, але не, якщо відповідне правило було запущено. Однак ви можете шукати подію, яка повинна викликати правило, але тоді ви не знаєте, чи працює ваше правило.
F.Raab

2

Я запускаю ядро ​​3.0.35, але для мене працює наступне.

Щоб отримати шлях для пристрою, ви можете зробити щось подібне:

udevadm info --name /dev/sda1 --query all

Ви отримаєте більше інформації, ніж вам потрібно, але вас зацікавить РОЗВИТКУ. Потім, щоб побачити, які правила udev виконуються, запустіть це:

udevadm test DEVPATH

Я не думаю, що це насправді виконує правила, в документації йдеться, що це "імітує" події для даного пристрою. Щоб отримати додаткову інформацію, перегляньте цю чоловічу сторінку: https://www.freedesktop.org/software/systemd/man/udevadm.html


1

З udev / systemd версією 241 та подібними, як root:

udevadm control --log-priority=debug
journalctl -f

Або зробити його постійним, знову ж таки як root:

vi /etc/udev/udevd.conf
systemctl restart systemd-udevd
journalctl -f

PS: Найчастіша, але неправильна відповідь ІМХО виглядає так:

udevadm -d тест / пристрої / де / є / мій / пристрій | та менше

... але це має ряд питань. Основні з них:

  • where/is/my/device? Набридливий, складний і схильний до помилок.

  • Порівнюючи старі відповіді з останніми результатами udev версії 241, udevadm testсхоже, показано менше інформації, ніж раніше.

  • udevadm -d test це лише симуляція ! Кожен раз, коли це попереджає:

    Ця програма призначена лише для налагодження, вона не запускає жодної програми, визначеної ключем RUN. Це може показувати неправильні результати, оскільки деякі значення можуть бути різними або недоступними при виконанні імітації.

udevadm test призначений для розробки нового правила, це не для усунення неполадок, порушених, відсутніх або перекритих правил.


0

У мене була така ж проблема з Raspberry Pi 3 B +. Я намагався викликати сценарій щодо вставлення USB-накопичувача. Правила не заносяться в syslog, тому стає дуже важко зрозуміти, яке правило працювало або яке правило не вдалося.

Тому я зробив наступне:

  1. Я створив свій файл правил у /etc/udev/rules.d/100-myrule.rules
  2. Потім я запустив команду sudo /etc/init.d/udev restart

і коли я перевірив, це спрацювало.

Інформація, яка може бути або не корисна, полягає в тому, що файлові системи читаються тільки для udev, поки не буде виконана команда на кроці 2.


0

udevadm test $(udevadm info --query=path --name=device_name)повинен сказати вам, які команди виконувались би на плагіні пристрою, посилаючись на відповідні udevправила. Наприклад:

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.