এই প্রশ্নটি অন্য একটি থেকে উত্থাপিত হয়েছিল যা আমি স্ট্যাকওভারফ্লোতে ভঙ্গ করেছি । আমি ব্যবহার করছি প্রহরী - একই সমস্যা প্রযোজ্য 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]
।
ext4
এবং আমি যুক্তিযুক্তভাবে নিশ্চিত যে আমার কাছে ওয়াচারের দুটি দৌড়ের ঘটনা নেই। ইনক্রনকে নিয়েও আমি একই ইস্যুতে অংশ নিয়েছি।
delete
রুটিন অক্ষম করে আবার চেষ্টা করতে পারেন?
unlink
সমস্যা সমাধানের পরেও কোন সমস্যা বজায় নেই