কেন ইভেন্টগুলিকে একাধিকবার আগুন দেওয়া হয়


13

এই প্রশ্নটি অন্য একটি থেকে উত্থাপিত হয়েছিল যা আমি স্ট্যাকওভারফ্লোতে ভঙ্গ করেছি । আমি ব্যবহার করছি প্রহরী - একই সমস্যা প্রযোজ্য Incron - একটি ফোল্ডার এবং পরিবর্তন এবং চুপি চুপি কাঠবিড়াল দূরে ড্রপবক্স সেই পরিবর্তনের জন্য তার সন্তানের ফোল্ডার নিরীক্ষণ করতে।

আমি write_closeইভেন্টটি পর্যবেক্ষণ করি - IN_CLOSE_WRITE- উদ্দেশ্যে। মূলত আমি modifyইভেন্টটি দেখছিলাম , অর্থাৎ IN_MODIFY। এটি কাজ করার সময় আমি দেখতে পেলাম যে বড় ফাইলগুলি লেখার সময় এটি একাধিকবার গুলি ছড়িয়ে যায়। এই শব্দটি মোটামুটি ভাল বলে আমি স্যুইচ করেছি IN_CLOSE_WRITEযেহেতু আমার মনে হয়েছে যে প্রদত্ত ফাইলের জন্য এটি কেবল একবারই ঘটবে তা ধরে নেওয়া যুক্তিযুক্তভাবে উপযুক্ত fair

যাই হোক, এটা ব্যপার না। এমনকি একটি খুব ছোট টেক্সট ফাইলের জন্য - কেবল একটি চরিত্র - ন্যানোতে ইভেন্টটি দু'বার তৈরি হয়েছিল। একই ফাইলটি ড্রপবক্সে দু'বার সিঙ্ক্রোনাইজ করা হলে সর্বোপরি এটি অপ্রয়োজনীয় ট্র্যাফিকের ফলে ঘটতে পারে। আমার নিজের ক্ষেত্রে এটি বিপর্যয়ের দিকে পরিচালিত করে যেহেতু প্রথম ইভেন্টটি থেকে আমি সিঙ্ক্রোনাইজেশন করি এবং তারপরে সার্ভারের সাইড ফাইলটি মুছুন। ফলাফল - দ্বিতীয় ইভেন্টে ড্রপবক্স সাইড ফাইলটি 0 বাইট ফাইল হয়ে যায়।

আমি অন্য কিছু করার আগে 10 সেকেন্ডের জন্য আমার সিঙ্ক্রোনাইজেশন স্ক্রিপ্টটিকে ঘুমিয়ে রাখার জন্য আপাতত এই বিষয়টি নিয়ে কাজ করছি এবং তারপরে আমি পরীক্ষা করে দেখছি যে ড্রপবক্স সিঙ্ক করার চেষ্টা করার আগে প্রশ্নে থাকা ফাইলটি এখনও বিদ্যমান। এটি কাজ করে কারণ দ্বিতীয় পুনরাবৃত্তির সময় ফাইলটি অনুপস্থিত এবং স্ক্রিপ্টটি সবে শেষ হয়।

এটি সেরা হ্যাকিশ শোনায়। সম্ভবত একটি খারাপ হ্যাক না তবে আমি বুঝতে পছন্দ করব - কেবল IN_CLOSE_WRITEইভেন্টটি কেন একাধিকবার ঘটে?


কিছু অতিরিক্ত তথ্য

  • নজরদারি চালানোর একাধিক উদাহরণ নেই কিনা তা পরীক্ষা করে দেখুন।

থেকে আউটপুট ps ax|grep watcher.py

23880 ?        Sl     0:01 python /usr/local/bin/watcher.py restart
24977 pts/0    S+     0:00 grep --color=auto watcher.py

ফাইল সিস্টেমটি হচ্ছে ext4। আমার উল্লেখ করা উচিত যে আমি ইনক্রন নিয়ে ঠিক একই সমস্যাটির মুখোমুখি হয়েছি। আমি ওয়াচারের ডেমনটি এর মাধ্যমে সম্পাদিত ব্যাচের স্ক্রিপ্ট থেকে শুরু করি /etc/rc2.d। ইনক্রন ওটিএইচ এর ডিফল্ট apt-get install incronইনস্টলেশনটির মাধ্যমে আমার দ্বারা কোনও গোলমাল ছাড়াই শুরু হয় ।


আমার watcher.iniফাইলের সারাংশ নীচে দেখানো হয়েছে।

[DEFAULT]
logfile=/var/log/watcher.log
pidfile=/var/run/watcher.pid

[job1]
watch=/path/to/watch

events=write_close
excluded=
recursive=true
autoadd=true

command=/home/datastore.php $filename

আমি datastore.phpস্ক্রিপ্টটি খালি প্রয়োজনীয়গুলিতে কমিয়ে দিয়েছি তা যাচাই করতে যে এটি আমার কোনও অগোছালো ড্রপবক্স আপলোড + উত্স মোছার কোড ছাড়াই দু'বার চালিত হয়েছে।

#! /usr/bin/php
<?php
file_put_contents('/tmp/watcher',$argv[1],FILE_APPEND);

?>

আমি তখন প্রশ্নের মধ্যে একটি সামান্য ফাইল তৈরি করেছি এবং তারপরে পরীক্ষা করেছি /tmp/watcher। সমস্যা এখনও অব্যাহত রয়েছে - ফাইলটির জন্য এখনও দুটি ধারাবাহিক এন্ট্রি রয়েছে $argv[1]


1
আমি অনেক প্রকরণ চেষ্টা করেছি, তবে একাধিক IN_CLOSE_WRITE জালিয়াতি দিয়ে আপনার সমস্যাটির সদৃশ করতে অক্ষম। আমি যা কিছু করেছি তাতে একক ইনোটিফাই আউটপুট হয়। আমি চেষ্টা করে যাচ্ছি। তবে এখন পর্যন্ত কেবল প্রশ্ন। কোন ফাইল সিস্টেম? Ext4? অন্যান্য?
লার্নিক্স

@ লরনিক্স - দয়া করে আমার প্রশ্নের সম্পাদনাগুলি দেখুন। ফাইল সিস্টেমটি ext4এবং আমি যুক্তিযুক্তভাবে নিশ্চিত যে আমার কাছে ওয়াচারের দুটি দৌড়ের ঘটনা নেই। ইনক্রনকে নিয়েও আমি একই ইস্যুতে অংশ নিয়েছি।
DroidOS

আপনি বলেছিলেন যে 'আমি সিঙ্ক্রোনাইজেশন করব এবং তারপরে সার্ভারের সাইড ফাইলটি মুছব'। এটি কি দ্বিতীয় ইভেন্টটিকে মুছবে? আপনি কি deleteরুটিন অক্ষম করে আবার চেষ্টা করতে পারেন?
জার্মার

@ জার্মার - আমার প্রশ্নের সম্পাদনা দেখুন। এমনকি সিঙ্ক স্ক্রিপ্টটি সত্যিকারের সিঙ্কিং না করে এবং unlinkসমস্যা সমাধানের পরেও কোন সমস্যা বজায় নেই
DroidOS

দুঃখিত, ধারণাগুলির পরিবর্তে, আমি আমার কোনও মেশিনে সমস্যাটি পুনরুত্পাদন করতে পারি না। আমি একটি ইভেন্ট পাই, আর নেই। অন্য কিছু জড়িত, কিছু উল্লেখ করা হয় নি। আপনি কি অ্যান্টিভাইরাস ইনস্টল করেছেন? এরকম কিছু?
লর্নিক্স

উত্তর:


1

আমি নিশ্চিত নই, তবে সম্ভবত প্রথম লিখন_ক্লোজ এতে সৃষ্টির সময়ের মতো ফাইলের বৈশিষ্ট্যগুলি লিখবে এবং তারপরেই এটি প্রকৃত ডেটা লিখবে। আসলে আরএসসিএনসি একটি টেম্প ফাইল তৈরি করে এবং যখন সবকিছু শেষ হয়ে যায় তখন টেম্প ফাইলটি একই ফোল্ডারে আসল ফাইলে স্থানান্তরিত করে তাই আপনি যখন আরএসসিএনসি ব্যবহার করেন তখন সাধারণত এটি নিরীক্ষণ করা সহজ হয়ে যায়, এবং স্থানান্তর একটি পারমাণবিক ক্রিয়াকলাপ। অন্যদিকে ইনোটাইফায় একটি শট কল রয়েছে, সম্ভবত এটি ব্যবহার করে আমরা প্রথম সংশোধনকারী বার্তায় কিছু ট্রিগার করতে পারি এবং আপনি যেমন অপারেশন শুরু করার আগে যুক্তিসঙ্গত সময়ের জন্য ঘুমের পরামর্শ দিয়েছিলেন। আমি এখন এটি খনন করছি এবং আমি নতুন কিছু খুঁজে পেলে আপডেট করব। /superuser/1133642/traceing-the-moment-when-file-is-completely-copied-to-samba-share-with-inotify


আপনি এখানে বেশ কার্যকর কিছুতে আপনার আঙ্গুলটি ভালভাবে রাখতে পারেন। এটি কিছু তদন্ত প্রয়োজন হবে। টিপ জন্য ধন্যবাদ. আমি ইভেন্টটি ফিরে পোস্ট করব যে আমি দেখতে পাচ্ছি যে এটি কোনওভাবেই একটি সমস্যা।
DroidOS

আমি মনে করি না যে এটিটিআরআইবি নিজেই ফাইলটিতে কিছু যুক্ত করে, আমি ভুল ছিল।
এডিক মকোয়ান

0

এটি মন্তব্য হিসাবে পোস্ট করার মতো পর্যাপ্ত পরিমাণে আমার কাছে নেই, তবে আপনি কি নিশ্চিত যে অস্থায়ী, সম্ভবত-লুকানো ফাইলগুলি তৈরি হচ্ছে না? আমার inotifywaitএকাধিকবার গুলি চালানোর সাথে একই রকম সমস্যা ছিল , তবে আমি বুঝতে পেরেছিলাম কারণ ভিম সম্পাদনা করার সময় একটি .swp ফাইল তৈরি করবে, যা বন্ধ হওয়ার সাথে সাথে কোনও ইভেন্ট নিক্ষেপ করবে। এটি আসল ফাইলটি থেকে ঘনিষ্ঠ ইভেন্টটি বেছে নেবে।

দেখে মনে হচ্ছে আপনি একই ফাইলটিতে একাধিক ফাইল ফায়ারিংয়ের বিষয়টি লক্ষ্য করছেন, যা আমি পুনরুত্পাদন করতে সক্ষম হয়েছি এমন কিছু নয় - এটি কেবলমাত্র টেম্প ফাইলের জন্য এবং একবার আসলের জন্য ঘটবে।

আমি ন্যানো দিয়ে একটি দ্রুত পরীক্ষার চেষ্টা করেছি এবং আমার মনে হয় না এটি মোটেও একটি টেম্প ফাইল তৈরি করে (কমপক্ষে কয়েকটি চরিত্রের ক্ষেত্রে), তবে আপনার সেটআপে এমন আরও কিছু রয়েছে যা অনুরূপ আচরণের উপর নির্ভর করতে পারে?


আপনার পরামর্শের জন্য ধন্যবাদ. আমি ন্যানোর সাথে খুব তুচ্ছ 1 বাইট ফাইল তৈরি করে এমনকী - বা এমনকি কনসোল থেকে একটি ফলের মধ্যে একটি একক চর পুনর্নির্দেশ করেও আমি একাধিক ইস্যুটি inotify করেছি। আমি আমার মূল প্রশ্নের মধ্যে যে সমাধানটি দিয়েছি তা আমাকে আপাতত চালিয়ে যাচ্ছে। যাইহোক, দীর্ঘমেয়াদে আমার কেবলমাত্র ত্রুটি শুরু হওয়ার সাথে সাথে সনাক্ত করতে আমার সার্ভারটি পুনরায় তৈরি করতে হবে - ইনক্রন, ওয়াচারের সাথে আমার সেটআপ (বিটিডব্লিউটি যখন হয়েছিল যখন আমি কেবল ইনক্রন ছিলাম), মারিয়াডিবি, এনগিনেক্স, রেডিস, মেমক্যাচড ... হুবহু "সরল" নয়।
DroidOS

কেবলমাত্র যদি আপনি একই ফোল্ডারটি দু'বার পর্যবেক্ষণ করছেন না তবে ডাবল পরীক্ষা করে দেখুন। যদি না হয়, তবে উদাহরণস্বরূপ যখন আমি ওএস এক্স সাম্বা ক্লায়েন্টের মাধ্যমে সাম্বা শেয়ারে ফাইলটি অনুলিপি করি তখন এটি তৈরি, ক্লোজ_রাইট, মুছুন, তৈরি করুন, ক্লোজওরাইট লিখুন যখন আমি উইন্ডোজ ক্লায়েন্টের সাথে এটি করি, তখন এটি যুক্তিসঙ্গতভাবে তৈরি, লিখন_ক্লোজ এবং আরও কিছু না দেখায়। সুতরাং আমি এই IN_MODIFY, IN_ONESHOT / ডিরেক্টরি দিয়ে ফাইলটির প্রথম পরিবর্তনটি পর্যবেক্ষণ করে আমার সমস্যাটি সমাধান করি। ঘুমেরও সময়টাইম কমান্ড ওনশোট কাজটি করে।
এডিক মকোয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.