ডিরেক্টরি নিরীক্ষণ করতে ইনোটাইফাই ব্যবহার করছেন তবে 100% কাজ করছেন না


10

একটি নির্দিষ্ট ডিরেক্টরি নিরীক্ষণের জন্য আমি বাশ স্ক্রিপ্ট লিখেছি /root/secondfolder/:

#!/bin/sh

while inotifywait -mr -e close_write "/root/secondfolder/"
do
    echo "close_write"
done

যখন আমি একটি ফাইল নামক তৈরি fourth.txtমধ্যে /root/secondfolder/এবং লেখার কাপড় এটি, সংরক্ষণ করুন এবং এটি বন্ধ, এটা নিম্নলিখিত আউটপুট:

/root/secondfolder/ CLOSE_WRITE,CLOSE fourth.txt

তবে এটি "ক্লোজ_ রাইট" প্রতিধ্বনিত হয় না। কেন এমন?

উত্তর:


16

inotifywait -m এটি "মনিটর" মোড : এটি কখনই প্রস্থান করে না। শেলটি এটি চালায় এবং লুপটির বডি চালাবেন কিনা তা জানতে বহির্গমন কোডটির জন্য অপেক্ষা করে, তবে তা কখনই আসে না।

যদি আপনি অপসারণ করেন তবে -mএটি কাজ করবে:

while inotifywait -r -e close_write "/root/secondfolder/"
do
    echo "close_write"
done

উত্পাদন করে

Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/root/secondfolder/ CLOSE_WRITE,CLOSE bar
close_write
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
...

ডিফল্টরূপে, ইনোটিফাইয়েট "প্রথম ইভেন্টটি ঘটে যাওয়ার পরে প্রস্থান করবে", যা আপনি লুপ অবস্থায় চান।


পরিবর্তে, আপনি এর স্ট্যান্ডার্ড আউটপুট পড়তে পছন্দ করতে পারেন inotifywait:

#!/bin/bash

while read line
do
    echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")

এই (বাশ) স্ক্রিপ্টটি inotifywaitকমান্ডের প্রতিটি আউটপুট লাইনটি প্রক্রিয়া প্রতিস্থাপন$line ব্যবহার করে লুপের অভ্যন্তরে চলকটিতে পড়বে । এটি প্রতিবার লুপের চারপাশে পুনরাবৃত্ত ঘড়িগুলি সেট আপ করা এড়িয়ে যায়, এটি ব্যয়বহুল হতে পারে। আপনি ব্যাশ ব্যবহার করতে পারবেন না, তাহলে আপনি নল লুপ মধ্যে কমান্ড পরিবর্তে যা করতে পারেন: । এই মোডে প্রতিটি ইভেন্টের জন্য আউটপুট একটি লাইন উত্পাদন করে, তাই লুপ প্রতিটি জন্য একবার চালায়।inotifywait ... | while read line ...inotifywait


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