কোনও ওদেব নিয়ম কীভাবে ডিবাগ করবেন (/etc/udev/rules.d/… এ)


15

আমি একটি নতুন বেসিক নিয়ম তৈরি করছি

/etc/udev/rules.d/10-myrule.rules

ধারণকারী:

KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"

আমি সংরক্ষণ করেছি, রিবুট করেছি এবং একটি এসডি কার্ড প্রবেশ করিয়েছি (এর দ্বারা স্বীকৃত /dev/sdb1, আমি এটি দিয়ে দেখি dmesg), তবে কিছুই ঘটে না। আমি যখন ম্যানুয়ালি করি mount /dev/sdb1 /media, এটি কাজ করে।

আমি কীভাবে এই জাতীয় udevনিয়মের সমস্যা সমাধান / ডিবাগ করব ?

দ্রষ্টব্য: আমি আর্চলিনাক্স ব্যবহার করছি, তবে এটি কোনও ডিস্ট্রোতে একই হওয়া উচিত?


1
ফাইলের 99-myrule.rules
নামটি এতে

@ জেসনওয়ারিয়ান: একই: কিছুই হয় না। কোনও ওদেব নিয়মকে কীভাবে সমস্যা সমাধান করবেন? আমি কি এটি ম্যানুয়ালি ট্রিগার করব (কীভাবে এই ক্ষেত্রে?)
বাসজ

কি systemdস্বাভাবিক udev দ্বারা আচরণের কিছু পরিবর্তন?
বাসজ 4'15

1
চেষ্টা করুন udevadm monitor, এটি এবং এটি দেখুন
কুম্ভ শক্তি

1
নিয়মিত পুনরায় পড়ার জন্য উদেবকে পাওয়ার জন্য আফাইক কেউ পুনরায় বুট করার দরকার নেই (দেখুন unix.stackexchange.com/a/39371/44760 )। আমি আমার উদেব ডিবাগিং করেছি (যা সত্যই সহজতম কাজ নয়!) udevadm testএবং বাস্তবতার বিরুদ্ধে বৈধতাযুক্ত নিয়ম সহ udevadm info
জাগ্রিমসান

উত্তর:


11
  • 10-জেসনওয়ারিয়ান উল্লিখিত হিসাবে, উচ্চ সংখ্যায়ন (90 এর ভাল) ব্যবহার করুন। সুতরাং আপনি নিয়ম করেন না যে অন্য কোনও দ্বারা ওভাররাইড হবে।
  • আপনার সত্যিকারের প্রয়োজন অনুসারে ন্যূনতম কীগুলি ব্যবহার করুন। উদাহরণ, !=এবং GOTO/ এর LABELপরিবর্তে সরাসরি ব্যবহার করুন==

    ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
    
  • আপনার লক্ষ্য sdb1স্থির কমান্ডের সাথে ছিল , অন্ধ ম্যাচটি ব্যবহার করে হ্রাস করুনKERNEL=="sdb1"

  • আমি একটি ছায়া ডিবাগিং নিয়ম তৈরি করা দরকারী বলে মনে করি, আমি ছায়া বলেছিলাম কারণ আমি এটি সর্বদা একই ফাইলটিতে রেখেছি, সুতরাং যখন আমার প্রয়োজন হবে আমি এটি ব্যবহার করি।

    ACTION=="add", KERNEL=="sdb*", RUN+="/bin/sh -c 'echo == >> /home/user/Desktop/udev-env.txt; env >> /home/user/Desktop/udev-env.txt'"
    #ACTION=="add", KERNEL=="sdb*", RUN+="/usr/bin/mount /dev/sdb1 /media"
    

    দ্রষ্টব্য: udev-env.txt তৈরি হয় তারপরে বিধিটি যাইহোক ট্রিগার করা হয়। একটি মিলে যাওয়া নোডের==সাথে সম্পর্কিতলাইন। এই ফাইলটিতে রেকর্ড করা ENV 2 নোড বা তারও বেশিের মধ্যে মিশ্রণ হতে পারে, প্রায় একই সময়ে তৈরি হয়েছিল, এটি একটিবাফারিং সমস্যা।stdout

  • ব্যবহারের udevadm monitor -u, udevadm test ...এবং udevadm trigger ... যাচাই করার জন্য যা বিধি ঘটনা প্রক্রিয়া করেছি।

  • স্ক্রিপ্ট ইনসাইড ডিবাগ লগ ইন করুন এবং ধরা ব্যর্থ কমান্ড করতে, তাদের ফেরত মান এছাড়াও সংরক্ষণ করে আপনার উপরে stdout& stderrবার্তা।

হালনাগাদ:

  • তথ্যসূত্র: udev_237 - man udev (উবুন্টু_18.04)

    RUN{type}

    Note that running programs that access the network or mount/unmount filesystems is not
    allowed inside of udev rules, due to the default sandbox that is enforced on
    systemd-udevd.service.
    

1
খুব দরকারী. আপনি এই অন্যান্য সেটিংসটি সন্ধান করতে ব্যবহার করতে পারেন তার জন্য বেশ কয়েকটি মন্তব্য udevadm test...কেবল আপনাকে পরিবেশের ভেরিয়েবলগুলি দেখায় appears ATTRSudevadm info $DEVICE
এট রিগ

1
ইন udevadm infoরিটার্ন ডিভাইস একটি গাছ একটি ডিভাইস এবং তার পিতা বা মাতা ডিভাইসের মধ্যে সেটিংস পার্থক্য সতর্কতা অবলম্বন করা আবশ্যক (বৈশিষ্ট্য যদি ওভাররাইড না উত্তরাধিকারসূত্রে হবে বলে মনে হচ্ছে)। আমার ক্ষেত্রে সাবসিস্টেমটি ভুল ছিল।
এট রিগ

udevadm test "This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run."আসলে যা ঘটছে তা কেবল ট্রেস করার কোনও উপায় নেই ?
এইচ

@ মার্কএইচ, আপনি udevadm monitor -uইভেন্ট / শর্ত udevadm trigger ...পরীক্ষা করতে এবং তাদের ক্রিয়াকলাপ পরীক্ষা করতে ব্যবহার করতে পারেন ।
user.dz

@ মার্কএইচ, তবে স্ক্রিপ্টগুলির অভ্যন্তরে ডিবাগ লগ করা এবং ব্যর্থ কমান্ডগুলি ধরা (তাদের রিটার্নের মানটিও স্টাডআউট এবং স্ট্যাডার বার্তাগুলি সাশ্রয় করে) catch
user.dz

1

আমি মনে করি আপনি এখানে যে আদেশটি সন্ধান করছেন তা হ'ল udevadm। আপনি ওদেব ইভেন্টগুলির পুনরায় তদন্ত করতে এবং যথাক্রমে একটি নির্দিষ্ট ইভেন্ট পরীক্ষা করার জন্য triggerএবং testপরামিতিগুলি ব্যবহার করবেন ।

EL in এ নতুন নেটওয়ার্ক ডিভাইসটির নামকরণের সাথে ঘুরতে যাওয়ার সময় আমি এই কঠিন উপায়টি শিখেছি Good


1
  1. একটি udev নিয়ম ফাইল তৈরি করুন

    sudo nano /etc/udev/rules.d/99-removable-sd.rules
    
  2. নিয়ম যুক্ত করুন যা ইউডিস্কগুলিকে এটি অটোম্যান্ট করতে বলে

    SUBSYSTEM=="block", SUBSYSTEMS=="mmc", DRIVERS=="mmcblk", ATTRS{type}=="SD", ENV{UDISKS_AUTO}="1", ENV{UDISKS_SYSTEM}="0"
    

    ATTRS{type}=="SD" আপনি বিভিন্ন ধরণের ব্যবহার করছেন তবে প্রয়োজন হতে পারে না।

  3. নিয়মগুলি পুনরায় লোড করুন

    sudo udevadm control -R
    
  4. এটি নিষেধাজ্ঞার পরে ফিরে দিন।

তথ্যসূত্র: আর্চলিনাক্স উইকি: কিছু ডিভাইস, যা অপসারণযোগ্য হিসাবে বিবেচনা করা উচিত, তা নয়


0

আমি রাস্পবেরি পিআই 3 বি + এর সাথে একই সমস্যা ছিল, এটি সম্ভবত সম্ভব যে উপরের কমান্ডগুলি আপনাকে সহায়তা করতে পারে। কিন্তু এটি আমাকে সাহায্য করেনি। আমি একটি ইউএসবি স্টোরেজ ডিভাইস সন্নিবেশ করানোর জন্য একটি স্ক্রিপ্ট চাওয়ার চেষ্টা করছিলাম। নিয়মগুলি সিসলগে লগ হয় না, তাই কোন নিয়মটি কাজ করেছে বা কোন বিধি ব্যর্থ হয়েছে তা বোঝা খুব কঠিন হয়ে যায়।

সুতরাং আমি নিম্নলিখিতটি করেছেন:

(1) আমি আমার নিয়ম ফাইলটি /etc/udev/rules.d/100-myrule.rules এ তৈরি করেছি

(2) তারপর আমি কমান্ড চালানো sudo /etc/init.d/udev restart

তখন আমি এটি কাজ করেছিলাম। এক টুকরো তথ্য আপনার জন্য দরকারী হতে পারে বা নাও হতে পারে তবে (2) কমান্ডটি কার্যকর না হওয়া পর্যন্ত ফাইল সিস্টেমগুলি উদেবের জন্য পঠনযোগ্য।

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