কোনও ফাইল পরিবর্তন হলে কমান্ড কার্যকর করুন


9

আমার একটি দৃশ্যাবলী রয়েছে যেখানে আমি প্রতিদিন একটি নির্দিষ্ট ফোল্ডারে / cmp / ডেটা আপলোড আপলোড করছি এবং পুরানো ফাইলগুলি নতুন দ্বারা প্রতিস্থাপন করা হয়েছে।

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

একবারে আপলোড ফোল্ডারে কোনও ফাইলের তারিখ পরিবর্তন হওয়ার পরে আমাকে স্ক্রিপ্ট টেস্ট.পি কার্যকর করতে হবে, উদাহরণস্বরূপ, / tmp / ডেটা আপলোড।


আপনি কি ইলিম্যান . com / entrproject এর দিকে নজর রেখেছেন , নিজে চেষ্টা করে দেখেননি তবে দেখে মনে হচ্ছে এটি সম্পর্কিত হতে পারে।
OO যেমন পণ্য

এফওয়াইআই, পাইথনের inotifyলাইব্রেরি রয়েছে। : একটি উদাহরণ জন্য এখানে আমার উত্তর এক দেখতে askubuntu.com/a/939392/295286
Sergiy Kolodyazhnyy

উত্তর:


10

আপনার প্রয়োজন হতে পারে (ইনোটাইফাই ক্রোন ডেমন) যা ফাইলগুলির পরিবর্তনগুলি পর্যবেক্ষণ করে এবং তারপরে স্ক্রিপ্টগুলি কার্যকর করে।

Incrond নতুন ফাইল যুক্ত করতে, পরিবর্তন করতে, মুছতে এবং আরও অনেক কিছু পর্যবেক্ষণ করতে পারে। এটি একটি নিবন্ধটি দেখায় যে ইভেন্টটি কীভাবে উদাহরণস্বরূপ ইভেন্টটি পর্যবেক্ষণ করতে পারে।

আপনার ক্ষেত্রে উদাহরণস্বরূপ, আপনি ফাইল তৈরি পারে /etc/incron.d/data_uploadবিষয়বস্তু সঙ্গে

/tmp/data_upload IN_CREATE,IN_MODIFY /path/to/test.py 

2
যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
জেরাল্ড স্নাইডার

আমাকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ, আমি লিঙ্কটির প্রসঙ্গটি যুক্ত করেছি।
ভিক্টোরিওলান

উত্তরের জন্য ধন্যবাদ, কেবল ইনস্ট্রাস্টাব শোল্ডল ইনস্টল করার পরে পদক্ষেপগুলি যাচাই করতে incrontab -eরুট হিসাবে এক্সিকিউট করবেন তারপরে এই লাইনটি অন্তর্ভুক্ত করবেন /tmp/data_upload IN_CREATE,IN_MODIFY test.py ? যাতে একবার আমি একটি নতুন ফাইল আপলোড করি তা চেক করার জন্য এটি টেস্ট.পি ফাইল চালানো উচিত? আমার টেস্ট.পি ফাইলটি কোথায় রাখা উচিত? আমি কি এর জন্য নিখুঁত পথ সরবরাহ করা উচিত?
অ্যালেক্স

1
আমি মনে করি, আপনার স্ক্রিপ্টের জন্য পরম পথ রাখাই ভাল। স্ক্রিপ্টটি যদি কাজ না করে বলে মনে হয় আপনি ক্রোন বা সিস্টেম লগও পরীক্ষা করতে পারেন
ভিক্টোরিলোয়ান

আপনি যে ফাইলটি আপনার কোড ব্লকটির সাথে উল্লেখ করছেন তাও নথিভুক্ত করতে পারেন, যারা ইনকর্ন্ডের সিনট্যাক্সের সাথে পরিচিত নন (আমার মতো) এমন লোকেরা ভাবতে পারে যে আপনাকে যে কমান্ড লাইনে কার্যকর করতে হবে সেই আদেশটি নির্দেশ করছে
ফেরিবিগ

1

স্টার্টআপের সময় একবার চালিয়ে কোনও ফাইল পরিবর্তিত হয়ে আপনি স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে চালনার জন্য এনট্রি ব্যবহার করতে পারেন ls /tmp/data_upload | entr -p script.py

প্রকল্পের ওয়েবসাইট: http://eradman.com/entrproject/

অনলাইন ম্যান পৃষ্ঠা: https://www.systutorials.com/docs/linux/man/1-entr/


0

watchexec( Https://crates.io/crates/watchexec ) কমান্ড লাইন ইউটিলিটি শব্দসমূহ ঠিক পছন্দ আপনার যা প্রয়োজন, যদিও আমি এটা ইনস্টল করতে মরচে বিল্ড সরঞ্জামগুলি আপনার মেশিনে ইনস্টল থাকতে হবে চাই বিশ্বাস করি, যাতে হতে পারে চুক্তি ভঙ্গকারী


1
আমি মরিচায় লেখা সফ্টওয়্যারটি ব্যবহার করতে পছন্দ করি কারণ আপনি জানেন যে এটি 2004 বা কোনও কিছুতে পরিত্যক্ত হয়নি। এটি প্রায় নতুন হতে হবে।
নাথানিয়েল পিসারস্কি

0

আমার সাধারণ পদ্ধতির সাথে ক্লাসিকাল ইউনিক্স findইউটিলিটিটি মেলাতে হবে। উদাহরণস্বরূপ, কমান্ড

find /tmp/upload_data/*.csv -mtime -1 -exec /home/myname/test.py

একদিনেরও কম আগে যে কোনও .csvফাইল /tmp/upload_dataসংশোধন করা হয়েছে সেগুলি খুঁজে পাবে এবং test.pyযদি এটির সন্ধান করে তবে এটি চালায় । অবশ্যই, যদি আপনার test.pyফাইলটি অন্য কোনও ডিরেক্টরিতে থাকে তবে আপনি সেই অনুযায়ী আপনার পথটি আপডেট করতে চান।

আপনি যদি cronপ্রতিদিন একবারে বেশিবার কাজ চালান , আপনি কয়েক মিনিটের মধ্যে পরিবর্তন হওয়ার পরে সর্বাধিক সময় নির্দিষ্ট করতে mminবিকল্পটি ব্যবহার করতে পারেন find। উদাহরণ স্বরূপ,

find /tmp/upload_data/*.csv -mmin -60 -exec /home/myname/test.py

.csv60 মিনিটেরও কম আগে যে ফাইলগুলি সংশোধিত হয়েছিল সেগুলি অনুসন্ধান করবে - ক্রোন যদি প্রতি ঘন্টা কাজ চালায় তবে দরকারী।

দুটি সুষ্ঠু সতর্কতা ক্রমে রয়েছে: প্রথমত, এটি .csvএমন ফাইলগুলিকে ধরবে না যা আপনি সম্পূর্ণরূপে মুছে ফেলেছিলেন। আপনি এগুলি আলাদাভাবে পরীক্ষা করতে চাইতে পারেন। দ্বিতীয়ত, এগুলির কোনও পরীক্ষার জন্য আমার কাছে সময় ছিল না। আমার কোডে টাইপগুলি আশা করুন যে আপনাকে নিজের দ্বারা ডিবাগ করতে হবে।


1
-cmdসিনট্যাক্স কী ? আইআইআরসি findনেয় -exec cmd ;...
ডি বেন নোবল

এই প্রশ্নটি পোস্ট করার আগে আমি এটি ব্যবহার করে দেখেছি, ক্রোন
অ্যালেক্স

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