Bir udev kuralının tetiklenip tetiklenmediğini nasıl kontrol edebilirim?


16

Ubuntu 13.10 altında kendimi udev ile tanıştırmaya çalışıyorum.

İşte benim ilk basit 95.usbbackup.rules kuralı:

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

ve işte komut dosyası (chmodded + x) my_backup.sh:

#!/bin/bash
touch /tmp/test

Harici sürücüleri taktığımda hiçbir şey olmuyor. Kuralın tetiklendiğini nasıl kontrol edebilirim (günlük, komut, herhangi bir şey)?

Çok teşekkürler


2
Bence demek istiyorsun SUBSYSTEMS=="usb". Yani bir anahtara bir değer atayan ==tekli yerine eşitliği test eden çifte =.
Lqueryvg

Yanıtlar:


5

Bunun işe yarayacağından eminim. Kurallarınızı düzenledikten sonra udev kurallarınızı yeniden yüklediniz mi?

udevadm control --reload-rules && udevadm trigger kök olarak.


Daha dar bir kural koydum: KERNEL == "sdb", bu da işe yarıyor. Udev sadece bazı donanımları benzersiz olarak tanımlayan kuralları ele alıyor mu?
pouzzler

Hayır, deneyin KERNEL!="sdz*"ve her şeyi almalısınız (sdz [1-9] hariç)
Redsandro

5
Bu soruya gerçekten cevap vermiyor. Kuralların tetiklenip tetiklenmediğini nasıl anlarsınız?
DanielSank

1
Bilirsiniz çünkü komut dosyası çalıştırılır. Bir günlük dosyasına yazmasını sağlayabilirsiniz. Ayrıcaudevadm monitor
Redsandro

3

Kök olarak şöyle bir komut verebilirsiniz:

udevadm monitör

Bir kuralın ne zaman tetiklendiğini gösterecektir.


12
udevadm monitorsadece udev olaylarını gösterir, ancak karşılık gelen bir kural tetiklendiğinde gösterilmez. Ancak, kuralı tetiklemesi gereken olayı arayabilirsiniz, ancak kuralınızın çalışıp çalışmadığını bilmezsiniz.
F.Raab

2

Çekirdek 3.0.35 çalıştırıyorum, ancak aşağıdakiler benim için çalışıyor.

Cihazın yolunu almak için şöyle bir şey yapabilirsiniz:

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

İhtiyacınız olandan daha fazla bilgi alacaksınız, ancak DEVPATH ile ilgileniyorsunuz. Sonra hangi udev kurallarının yürütüldüğünü görmek için şunu çalıştırın:

udevadm test DEVPATH

Bunun kuralları gerçekten yürüttüğünü sanmıyorum, belgeler bunun verilen cihaz için olayları 'taklit ettiğini' söylüyor. Daha fazla bilgi edinmek için bu kılavuz sayfasına göz atın : https://www.freedesktop.org/software/systemd/man/udevadm.html


1

Udev / systemd sürüm 241 ve benzeri ile, root olarak:

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

Veya tekrar kök haline getirmek için:

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

Not: En sık görülen ancak IMHO yanlış yanıtı şöyle:

udevadm -d testi / cihazlar / nerede / nerede / benim / cihaz | & daha az

... ama bunun bir takım sorunları var. Ana olanlar:

  • where/is/my/device? Sıkıcı, karmaşık ve hataya açık.

  • Son udev sürüm 241 çıktısına eski cevaplar karşılaştırıldığında, eskiden udevadm testdaha az bilgi gösteriyor gibi görünüyor.

  • udevadm -d test sadece bir simülasyon ! Her zaman uyarıyor:

    Bu program yalnızca hata ayıklama içindir, RUN anahtarı ile belirtilen herhangi bir programı çalıştırmaz. Bazı değerler farklı olabileceği veya bir simülasyon çalışmasında kullanılamayabileceği için yanlış sonuçlar gösterebilir.

udevadm test yeni bir kural geliştirmek içindir, bozuk, eksik veya geçersiz kılınan kuralları gidermek için değildir.


0

Raspberry Pi 3 B + ile aynı sorunu yaşıyordum. Bir USB depolama aygıtı takarken bir komut dosyası çağırmaya çalışıyordum. Kurallar syslog'da oturum açmaz, bu nedenle hangi kuralın çalıştığını veya hangi kuralın başarısız olduğunu anlamak çok zorlaşır.

Bu yüzden aşağıdakileri yaptım:

  1. Kural dosyamı /etc/udev/rules.d/100-myrule.rules içinde yaptım
  2. Sonra komutu çalıştırdım sudo /etc/init.d/udev restart

ve kontrol ettiğimde işe yaradı.

Yararlı olabilecek veya olmayabilecek bir bilgi parçası, 2. adımdaki komut yürütülene kadar dosya sistemlerinin udev için salt okunur olmasıdır.


0

udevadm test $(udevadm info --query=path --name=device_name)komutlar hangi söylemeliyim olacağını öne sürerek bir cihaz fiş üzerinde yürütülecek udevkatılan kuralları. Örneğin:

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.