মিনিট ক্রোন, কেবলমাত্র একটি একক উদাহরণ নিশ্চিত করে Min


9

প্রতি মিনিটে স্ক্রিপ্ট চালানোর কোনও উপায় আছে (বা 2, বা 5, ইত্যাদি), তবে কেবল যদি এটি ইতিমধ্যে চালু না থাকে?

আমাদের স্ক্রিপ্টগুলির একটি সেট রয়েছে যা প্রতি মিনিটে চালানো দরকার। কখনও কখনও তারা শুরু এবং একটি সেকেন্ডে শেষ হতে পারে, অন্যান্য সময় তারা 5 মিনিটের জন্য যেতে পারে।

একযোগে মৃত্যুদণ্ড কার্যকর করা এড়ানোর আমাদের বর্তমান পদ্ধতি হ'ল is_runningপ্রতিটি স্ক্রিপ্টে একটি পতাকা সেট করা এবং এটি এখনও সক্ষম করে থাকলে বাইরে বেরিয়ে আসা। তবে এটি কিছুটা অবিশ্বাস্য (যেমন মারাত্মক ত্রুটিগুলি স্ক্রিপ্টটি থামার পরেও পতাকাটি সক্ষম করে দেবে)।

আমরা আমাদের নিজস্ব পরিচালককে লিখতে পারি, তবে আমি ভাবছি যে ইতিমধ্যে বিদ্যমান আরও কোনও ফ্যাশনেবল সমাধান রয়েছে কিনা।


+1 আমি এতেও আগ্রহী। আমি উত্তরটি জানি না, তবে আমি সম্ভাব্য সমাধানগুলিতে আগ্রহী।
সাইফ বেচান

উত্তর:


9

একটি ভাল উপায় flockপিডফাইল পরিবর্তে ব্যবহার করা হয়। ম্যানপেজটি পরীক্ষা করুন: পাল (1) । সুবিধাটি হ'ল কোনও প্রক্রিয়া কীভাবে শেষ / মরে যায় তা লকটি দিয়ে চলে যায়।


3

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

-s
    Serialize execution of jobs. Anacron will not start a new job before the previous one finished. 

আমি নিজে এটি পরীক্ষা করে দেখিনি, আমি অ্যানক্রনের ডকুমেন্টেশন পর্যাপ্তরূপে পাই না ...

আপনি যদি বিশেষভাবে অলস হতে চান ;-) পিএস আউটপুটটির মাধ্যমে গ্রেপিং প্রক্রিয়াটি চলমান হিসাবে ফিরে আসে তবে আপনি কেবল স্ক্রিপ্ট থেকে প্রস্থান করতে পারেন। তবে একটি লক / পিড ফাইল সবচেয়ে ভাল।


অ্যানাক্রন ক্রোন-র একটি সাম্প্রতিক সংস্করণ, সুতরাং এটি পুরানো মানের চেয়ে বেশি বৈশিষ্ট্যযুক্ত। 'কীভাবে' সম্পর্কে, এটি সম্ভবত একটি সিইচএইচএলডি হ্যান্ডলার নিবন্ধভুক্ত করে, যা কোনও শিশু প্রক্রিয়াটি মারা যাওয়ার পরে ট্রিগার হয়। সুতরাং এটি চলমান শিশুদের ট্র্যাক রাখতে এবং কেবল সেই কাজগুলি এড়িয়ে যেতে পারে।
জাভেয়ের

@ জাভিয়ার: আমি "অ্যানাক্রন ক্রোন-র একটি সাম্প্রতিকতম সংস্করণ, তাই এটিতে পুরানো মানের তুলনায় আরও বৈশিষ্ট্য রয়েছে" এর সাথে আমি একমত নই। কি anacronএবং করার মধ্যে কিছু ওভারল্যাপ রয়েছে cronতবে তারা বিভিন্ন সমস্যা সমাধান করে। ব্যবহার করে cron, আপনি কোনও কাজটি কীভাবে শুরু করবেন যেটি মেশিন বন্ধ থাকার কারণে মিস হয়েছিল? ব্যবহার করে anacron, আপনি প্রতি ডিসেম্বর 25 বা প্রতি 5 মিনিটে কীভাবে একটি কাজ শুরু করবেন? (আপনি অবশ্যই স্ক্রিপ্টের কাজটি ঠিক করতে পারেন, তবে আমি এটিই বলছি না))
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ কাইল: এই বিকল্পের ফলে একই সাথে এক সাথে একটি চালানোর জন্য নির্ধারিত বিভিন্ন কাজ নির্ধারিত হয়। এটি ওপি-র প্রয়োজনের জন্য কাজ করতে পারে, তবে এটি অন্যান্য চাকরি বা অন্যান্য কাজগুলিকে ব্লক করবে। এছাড়াও, anacronএক দিনের চেয়ে কম পিরিয়ডে চলবে না।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ ডেনিস উইলিয়ামসন: আমি অনুমান করি আপনি ঠিক বলেছেন, আমি ইতিহাসের বিশদটি পরীক্ষা করে দেখিনি। তবে তবুও আমি অনুমান করি যে ক্রোনটি অনেকটা প্রতিষ্ঠিত হওয়ার পরে অ্যানাক্রোণ প্রকল্প শুরু হয়েছিল এবং এটি দ্বারা অনুপ্রাণিত; সুতরাং এটি আশ্চর্যজনক নয় যে এর এমন বৈশিষ্ট্য রয়েছে যা ক্রোন দেয় না doesn't এছাড়াও, মূল প্রশ্নটি ক্রোন সম্পর্কে ছিল
জাভিয়ের

1

এটি সেই পদ্ধতির সঠিক সমাধান। সাধারণত, একটি পিড ফাইল ব্যবহার করা হবে এবং প্রক্রিয়াটি চলছে তা নিশ্চিত করার জন্য একটি পিড পরীক্ষা করা হবে। যদি বাসি হয় তবে লকফিলটি সরানো হবে এবং প্রক্রিয়াটি যেভাবেই চলবে।

ক্রোন চলার বিপরীতে কোনও অতিরিক্ত বুদ্ধি সাধারণত ডেমোন হিসাবে সফ্টওয়্যারেই লেখা হত।


1

যদি আপনার স্ক্রিপ্টগুলি এমন কোনও ভাষায় কোড করা হয় যা ঝাঁক (2) সিস্কেলকে সমর্থন করে তবে আপনি একটি ফাংশন কল সহ একটি লক ফাইলও পল করতে পারবেন। উদাহরণ:

যদি আপনি বাশ বা অন্যান্য স্ক্রিপ্টিং ভাষার সাথে আটকে থাকেন যা এটি সমর্থন করে না, তবে পশুর (1) এর সাথে ইতিমধ্যে প্রস্তাবিত সমাধানটিও ঠিক আছে।

PS যে কোনও ক্ষেত্রে, আপনার একবারে পৃথক লক ফাইল তৈরি করা উচিত (যদি এটি ইতিমধ্যে বিদ্যমান না থাকে), এবং এটি কখনও মুছবেন না। ডিরেক্টরি "/ var / লক" এই জাতীয় ফাইলগুলির জন্য একটি ভাল জায়গা।


0

এটির সমাধান যদি আপনার স্ক্রিপ্টটি অজগরে চলে (বা আপনি পরবর্তী কমান্ডের আগে চালুর জন্য পাইথন কমান্ড তৈরি করতে পারেন) - আমি গত সপ্তাহে এই সঠিক সমস্যার দিকে দৌড়েছি এবং যদিও আমি কিছু ভাল সমাধান পেয়েছি, তবে আমি খুব একটা সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নিয়েছি সহজ এবং পরিষ্কার পাইথন প্যাকেজ এবং এটি পিপিআইতে আপলোড করে। আপনি অবশ্যই এটি লক __file__করতে কোনও কাস্টম রিসোর্সের নাম দেওয়ার বিষয়ে চিন্তা না করার জন্য লক করতে পারেন।

এর সাথে ইনস্টল করুন: pip install quicklock

এটি ব্যবহার করা অত্যন্ত সহজ:

[nate@Nates-MacBook-Pro-3 ~/live] python
Python 2.7.6 (default, Sep  9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from quicklock import singleton
>>> # Let's create a lock so that only one instance of a script will run
...
>>> singleton('hello world')
>>>
>>> # Let's try to do that again, this should fail
...
>>> singleton('hello world')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/nate/live/gallery/env/lib/python2.7/site-packages/quicklock/quicklock.py", line 47, in singleton
    raise RuntimeError('Resource <{}> is currently locked by <Process {}: "{}">'.format(resource, other_process.pid, other_process.name()))
RuntimeError: Resource <hello world> is currently locked by <Process 24801: "python">
>>>
>>> # But if we quit this process, we release the lock automatically
...
>>> ^D
[nate@Nates-MacBook-Pro-3 ~/live] python
Python 2.7.6 (default, Sep  9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from quicklock import singleton
>>> singleton('hello world')
>>>
>>> # No exception was thrown, we own 'hello world'!

একবার দেখুন: https://pypi.python.org/pypi/quicklock

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