যখন ওয়াইফাই কার্ড প্লাগ ইন হয় তখন স্বয়ংক্রিয়ভাবে চালিত স্ক্রিপ্ট


9

আমি 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@ ব্যবহারকারী 1146332 এর প্রস্তাবিত হিসাবে সেট করতে পেরেছি এবং আমি এই আকর্ষণীয় লগ পেয়েছি:

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 বারের মতো কার্যকর করা হয়েছে, এটি এড়াতে কি কোনও উপায় আছে? আমি মনে করি এটি ঘটছে কারণ ওয়্যারলেস কার্ড ড্রাইভাররা যখন লোড হচ্ছে তখন তাদের কার্যত আনমাউন্ট এবং কার্ডটি মাউন্ট করার প্রয়োজন। পরামর্শ?


1
সম্পাদনার সাথে সম্পর্কিত: আমি নিশ্চিত যে /bin/echoআপনার লগের পরামর্শ অনুযায়ী সফলভাবে কার্যকর করা হয়েছিল। আপনার কমান্ডের আউটপুটটি test > /test.txtআপনার লগের রাজ্যগুলির মতো। এর কারণ হ'ল, >আপনার প্রসঙ্গে চরিত্রটির কোনও বিশেষ অর্থ নেই। এটি কেবলমাত্র তৃতীয় কমান্ড লাইন যুক্তি যা আপনি পাশ করেছেন echo। আপনি যদি শেলকে প্রদত্ত রেখার অর্থ ব্যাখ্যা করতে দেন তবে আপনি যা চান তা পাবেন /bin/echo 'test' > /test.txt। যেমনটি আপনি নিজের দ্বিতীয় সম্পাদনায় করেছেন। উদাহরণস্বরূপ, আপনি যা করেছেন তার বিপরীতে যদি আপনি udevনির্বাহ touch /test.txtকরতে দেন তবে আপনি আপনার মূলটিতে একটি নতুন ফাইল দেখতে পাবেন।
ব্যবহারকারী 1146332

উত্তর:


4

কিছুক্ষণ আগে আমার একটি সমস্যা ছিল এবং সমাধানটি ছিল সেই RUN+=অংশটি পরিবর্তন করা RUN+="sh -c '/root/test.sh'"। এখন, আমি জানি না যে আপনার প্রয়োজন আছে কিনা এই ক্ষেত্রে নিয়মটি কোনও কমান্ড নয়, একটি স্ক্রিপ্ট কল করছে script

আরেকটি পর্যবেক্ষণ: স্ট্রিং !থেকে সরানোর চেষ্টা করুন "test!"বা একক উদ্ধৃতি সহ ডাবল-কোটগুলি প্রতিস্থাপন করুন। শ্যালে !এর বিশেষ অর্থ থাকার কারণে এই ব্যাং সম্ভবত সমস্যা তৈরি করছে এবং ডাবল উদ্ধৃতি সেই অর্থটি সংরক্ষণ করে।


এটি ছাড়া বা এটি !কাজ করে না।
টিসিবি 13

RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"কাজ করে, তবে কোনও কারণে ফাইলটিতে 8 বার লিখিত "পরীক্ষা" পেয়েছে। কমান্ডটি একাধিকবার কার্যকর করা হচ্ছে বলে মনে হচ্ছে: এস
টিসিবি 13

3

আমার পরামর্শ এর লগিং অগ্রাধিকার সেট করতে হবে udevথেকে errথেকে infoসঙ্গে

 udevadm control --log-priority=info

আপনি যদি আরও তথ্য দেখতে চান তবে এটি সেট করুন debug। (কমপক্ষে একটি ডেবিয়ান সম্পর্কিত সিস্টেমে) কী করেছে udevসে সম্পর্কে এখন আপনি খুব বিস্তারিত তথ্য পেতে পারেন /var/log/daemon.log। সাধারণত এটি ত্রুটিগুলি তাড়াতে অনেক সহায়তা করে।

এটি কেবল পোস্টের উত্তরের পরিপূরক যা সম্ভবত আপনার সমস্যার সমাধান করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.