मैं udev
एक वायरलेस कार्ड कनेक्ट होने पर डेबियन सिस्टम को बैश स्क्रिप्ट चलाने के लिए उपयोग करने की कोशिश कर रहा हूं ।
अब तक मैंने यह फाइल बनाई /etc/udev/rules.d/wifi-detect.rules
:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"
और अभी के लिए, मैं test.sh
इस सामग्री के साथ काम करने की कोशिश कर रहा हूँ :
#!/bin/bash
/bin/echo "test!" > /test.txt
लेकिन किसी कारण से, ऐसा कुछ भी नहीं होता है जब मैं वायरलेस कार्ड को जोड़ता हूं, कोई test.txt
फ़ाइल नहीं बनाई गई है।
मेरे lsusb
कार्ड पर:
Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
चल रहा है udevadm monitor –env
यह है कि क्या होता है जब मैं कार्ड कनेक्ट है:
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)
मैंने बहुत सारे उदाहरणों की कोशिश की है, लेकिन मैं इसे काम नहीं कर सकता। मुझे उम्मीद है कि कोई मेरी मदद कर सकता है;) धन्यवाद!
संपादित करें:
बात को आसान बनाने के लिए, मैंने अपना नियम बदल दिया:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"
मैंने udevadm control --log-priority=info
@ user1146332 के रूप में सेट करने में कामयाब रहा और मुझे यह दिलचस्प लॉग मिला:
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
इसलिए ... return code 0
सफल समापन के लिए निकास कोड नहीं है ? यदि ऐसा है तो मुझे सिस्टम पर कोई फ़ाइल क्यों नहीं मिल रही है?
संपादित करें 2:
मैं @htor द्वारा टिप का उपयोग करके यह काम पाने में कामयाब रहा। मेरा वर्तमान नियम:
ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"
लेकिन किसी कारण से कमांड को 8 बार निष्पादित किया जाता है, क्या इससे बचने का कोई तरीका है? मुझे लगता है कि हो रहा है क्योंकि जब वायरलेस कार्ड ड्राइवरों को लोड किया जा रहा है तो उन्हें कार्ड को वस्तुतः अनमाउंट करने और माउंट करने की आवश्यकता होती है। युक्तियाँ?
/bin/echo
आपके लॉग सुझाव के अनुसार सफलतापूर्वक निष्पादित किया गया था। आपकी कमांड का आउटपुटtest > /test.txt
आपके लॉग स्टेट्स के रूप में है। इसका कारण यह है, कि>
आपके संदर्भ में चरित्र का कोई विशेष अर्थ नहीं है। यह केवल तीसरी कमांड लाइन तर्क है जिसे आपने पास किया हैecho
। यदि आप अपने शेल को दिए गए लाइन की व्याख्या करने देते हैं तो आप जो चाहते हैं, वह आपको मिलता है/bin/echo 'test' > /test.txt
। जैसे आपने अपने दूसरे EDIT में किया है। उदाहरण के लिए यदि आपने जो किया है उसके विपरीतudev
निष्पादित होने दें, तो आपकोtouch /test.txt
अपनी जड़ में एक नई फ़ाइल दिखाई देगी।