Saya sudah mencoba menggunakan udev
untuk membuat sistem Debian menjalankan skrip bash ketika kartu nirkabel terhubung.
Sejauh ini saya membuat file ini /etc/udev/rules.d/wifi-detect.rules
:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"
Dan untuk saat ini, saya mencoba membuat test.sh
konten ini berfungsi:
#!/bin/bash
/bin/echo "test!" > /test.txt
Tetapi untuk beberapa alasan, sepertinya tidak ada yang terjadi ketika saya menghubungkan kartu nirkabel, tidak ada test.txt
file yang dibuat.
lsusb
Kartu saya ada di:
Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Menjalankan udevadm monitor –env
inilah yang terjadi ketika saya menghubungkan kartu:
KERNEL[1017.642278] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
KERNEL[1017.644676] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1017.645035] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
KERNEL[1017.708056] remove /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV [1017.714772] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
UDEV [1017.733002] remove /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV [1017.772669] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV [1017.798707] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1018.456804] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
KERNEL[1018.465994] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan0 (net)
KERNEL[1018.479878] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
KERNEL[1018.483074] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
UDEV [1018.600456] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
UDEV [1018.604376] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
UDEV [1018.626243] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
KERNEL[1018.659318] move /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV [1018.758843] add /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV [1018.932207] move /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
Saya sudah mencoba banyak contoh, tetapi saya tidak bisa membuatnya bekerja. Saya harap seseorang dapat membantu saya dengan yang ini;) Terima kasih!
EDIT:
Untuk mempermudah, saya mengubah aturan saya menjadi:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"
Saya berhasil mengatur udevadm control --log-priority=info
seperti yang disarankan @ user1146332 dan saya mendapatkan log yang menarik ini:
Sep 9 16:27:53 iklive-rpi1 udevd[1537]: RUN '/bin/echo 'test' > /test.txt' /etc/udev/rules.d/wifi-detect.rules:1
Sep 9 16:27:53 iklive-rpi1 udevd[1544]: starting 'firmware.agent'
Sep 9 16:27:53 iklive-rpi1 udevd[126]: seq 663 queued, 'remove' 'firmware'
Sep 9 16:27:53 iklive-rpi1 udevd[126]: seq 663 forked new worker [1547]
Sep 9 16:27:53 iklive-rpi1 udevd[1537]: 'firmware.agent' [1544] exit with return code 0
Sep 9 16:27:53 iklive-rpi1 udevd[1548]: starting '/bin/echo 'test' > /test.txt'
Sep 9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 running
Sep 9 16:27:53 iklive-rpi1 udevd[1547]: no db file to read /run/udev/data/+firmware:1-1.3.4: No such file or directory
Sep 9 16:27:53 iklive-rpi1 udevd[1547]: passed -1 bytes to netlink monitor 0x1af5ee0
Sep 9 16:27:53 iklive-rpi1 udevd[126]: seq 663 done with 0
Sep 9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 processed with 0
Sep 9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt'(out) 'test > /test.txt'
Sep 9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt' [1548] exit with return code 0
Jadi ... Bukankah return code 0
kode keluar untuk penyelesaian yang berhasil? Jika demikian mengapa saya tidak mendapatkan file di sistem?
EDIT 2:
Saya berhasil mendapatkan tip ini menggunakan @htor. Aturan saya saat ini:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
Tetapi dengan beberapa alasan perintah dijalankan sebanyak 8 kali, apakah ada cara untuk menghindari ini? Saya pikir ini terjadi karena ketika driver kartu nirkabel dimuat, mereka harus melepas dan memasang kartu tersebut. Kiat?
sumber
/bin/echo
eksekusi berhasil seperti yang disarankan oleh log Anda. Output dari perintah Anda adalahtest > /test.txt
sebagai status log Anda. Alasan untuk ini adalah, bahwa karakter>
tidak memiliki arti khusus sama sekali dalam konteks Anda. Itu hanya argumen baris perintah ketiga yang Anda terimaecho
. Anda mendapatkan apa yang Anda inginkan jika Anda membiarkan shell Anda mengartikan baris yang diberikan/bin/echo 'test' > /test.txt
. Seperti yang Anda lakukan di EDIT kedua Anda. Misalnya, jika Anda membiarkanudev
eksekusitouch /test.txt
berbeda dengan apa yang telah Anda lakukan, Anda akan melihat file baru di root Anda.Jawaban:
Saya punya masalah serupa beberapa waktu lalu dan solusinya adalah mengubah
RUN+=
bagianRUN+="sh -c '/root/test.sh'"
. Sekarang, saya tidak tahu apakah Anda memerlukannya dalam kasus ini karena aturannya memanggil skrip, bukan perintah.Pengamatan lain: coba hapus
!
dari"test!"
string atau ganti tanda kutip ganda dengan tanda kutip tunggal. Ledakan!
itu mungkin membuat masalah karena makna khusus di shell dan tanda kutip ganda mempertahankan makna itu.sumber
!
itu tidak berfungsi.RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
berfungsi, tetapi karena beberapa alasan e mendapat "tes" yang ditulis 8 kali dalam file. Sepertinya perintah sedang dijalankan beberapa kali: SSaran saya akan untuk mengatur prioritas penebangan
udev
darierr
keinfo
denganJika Anda ingin melihat lebih banyak informasi, aturlah
debug
. Sekarang Anda dapat menemukan informasi yang sangat terperinci tentang apa yangudev
terjadi di/var/log/daemon.log
(Setidaknya pada sistem terkait debian). Umumnya yang membantu banyak mengejar kesalahan.Ini hanya pelengkap jawaban htor yang mungkin bisa menyelesaikan masalah Anda.
sumber