প্রতি 15 সেকেন্ডে ক্রোন চলমান কাজ


18

আপনি আমাকে কী লিখতে পরামর্শ দিতে crontabপারেন যাতে /usr/bin/chromium-browserপ্রতি 15 সেকেন্ডে এটি কিছু কাজ চালায় (পরীক্ষার জন্য আমি ব্যবহার করব )?


ক্রন্টাবের পরিবর্তে, কিছু অন্যান্য ইভেন্ট ম্যানেজমেন্ট সিস্টেমের উপর নির্ভর করুন, উদাহরণস্বরূপ: পার্লের Every.pm মডিউল আপনাকে এটি করতে সহায়তা করবে।
নিখিল মুলি

উত্তর:


27

আপনি ক্রোন দিয়ে এক মিনিটের গ্রানুলারিটির নীচে যেতে পারবেন না। আপনি যা করতে পারেন তা হ'ল, প্রতি মিনিটে, একটি স্ক্রিপ্ট চালান যা আপনার কাজ চালায়, 15 সেকেন্ড অপেক্ষা করে এবং পুনরাবৃত্তি করে। নিম্নলিখিত ক্রন্টব লাইন some_jobপ্রতি 15 সেকেন্ডে শুরু হবে ।

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job

এই স্ক্রিপ্টটি ধরে নিয়েছে যে কাজটি 15 সেকেন্ডের বেশি সময় নেয় না। নিম্নলিখিত চালিয়ে যাওয়ার ক্ষেত্রে যদি খুব বেশি সময় লেগে থাকে তবে নীচের সামান্য জটিল স্ক্রিপ্টটি পরবর্তী উদাহরণটি না চালানোর বিষয়ে যত্নশীল। এটি ফর্ম্যাটটি dateসমর্থন করার উপর নির্ভর করে %s(যেমন জিএনইউ বা ব্যসিবক্স, সুতরাং আপনি লিনাক্সে ঠিক থাকবেন)। যদি আপনি এটি সরাসরি কোনও ক্রন্টবায় রাখেন তবে নোট করুন যে কোনও ক্রন্টব লাইনে %অক্ষরগুলি অবশ্যই লেখা উচিত \%

end=$(($(date +%s) + 45))
while true; do
  some_job &
  [ $(date +%s) -ge $end ] && break
  sleep 15
  wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job

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


এটিও হতে পারে: আমি 1 2 3 4 ; do some_job & sleep 15; done(শেষ ঘুম পরবর্তী রানটিকে প্রভাবিত করবে না), তবে আপনি যেভাবে করছেন সেটি সম্ভবত বহির্গামী ক্রোনজব মেইলের সময়কালের জন্য ভাল (শেষের কিছু_জবের পরে পাঠানো হয়েছে, পরে 15 এর দশকের আন্তের আমার বৈকল্পিক)
অলিভিয়ার দুলাক


13

অন্যদের চেয়ে পৃথক পদ্ধতি: 4 ক্রোনজব চালান, প্রতিটি 15 সেকেন্ড দ্বারা স্তব্ধ হয়ে থাকে:

* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job

কাজটি নিজেকে হস্তক্ষেপ করা থেকে বিরত রাখতে আমরা প্রতিটি কাজের জন্য GNU কোর্টিলস 'এর মাধ্যমে তার রানটাইমকে 15 সেকেন্ডের মধ্যে সীমাবদ্ধ করি timeout। তবে নোট করুন, তবে কাজটি যদি 15 এর শেষের দিকে অবিলম্বে সঠিকভাবে প্রস্থান করতে ব্যর্থ হয় তবে আপনি এখনও সমস্যাগুলি সহ শেষ করতে পারেন। যদি এটি কোনও সমস্যা হয়ে যায় তবে কীভাবে সমাধান করা যায় তার বিশদগুলির জন্য কমান্ড ম্যানুয়ালটি দেখুন। আরও মনে রাখবেন, কমান্ডটি যদি 15 এর বেশি সময় নেয় এবং সময়সীমাটি এটি মেরে ফেলেছে তবে আপনি একটি শূন্য-বহির্গমন স্থিতি পাবেন যা ক্রোনজব-ইমেলকে ট্রিগার করবে।


উজ্জ্বল, পুনরাবৃত্তি হওয়া সত্ত্বেও।
মাইক Kormentedy

1
খুশী হলাম। যদি কোনও প্রক্রিয়া দীর্ঘায়িত হয় তবে পরবর্তী প্রক্রিয়াটি সম্ভবত একটি অন্য মূল ক্ষেত্রেও শেষ হবে। আপনি যদি ইচ্ছাকৃতভাবে ক্রোন চাকরির জন্য মূল সম্পর্ক স্থাপন করতে পারেন তা নিশ্চিত নন, তবে এটি এই পদ্ধতিকে আরও উন্নত করতে পারে।
টিম

@ টিম ভাল পয়েন্ট। আমি কিছুটা এডিট করে সম্বোধন করেছি।
ওথিউস

2

সংক্ষেপে, ক্রোন সময় সঙ্গে যে দানাদার হয় না। আপনি পাবেন সবচেয়ে স্বল্পতম সময়টি 1 মিনিট।

#       .---------------- minute (0 - 59)
#       |       .------------- hour (0 - 23)
#       |       |       .---------- day of month (1 - 31)
#       |       |       |       .------- month (1 - 12) OR jan,feb,mar,apr ...
#       |       |       |       |       .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#       |       |       |       |       |
#       *       *       *       *       *       command to be executed
        *       *       *       *       /usr/bin/chromium-browser

তবে আপনি এমন একটি স্ক্রিপ্ট লিখতে পারেন যা প্রতি 15 সেকেন্ড চলবে ...


আমার * * * * * /usr/bin/chromium-browserক্রন্টবায় একটি লাইন আছে। ম্যানুয়াল অনুসারে এটি প্রতি মিনিটে চালানো উচিত তবে কিছুই চলছে না।
xralf

এরকম স্ক্রিপ্ট লেখা কি মুশকিল? আমি অন্য প্রশ্ন জিজ্ঞাসা করা উচিত বা এটি এখানে লেখা যেতে পারে?
xralf

ক্রোন জবসের কোনও টার্মিনাল নেই তাই আমি ব্রাউজারটি ব্যর্থ হওয়ার আশা করব। এটি নিঃশব্দে করতে পারে।
বিলথোর

আমার ক্রোন লগগুলি রেডহাটের ডেরিভেটিভগুলির জন্য, যেমন / var / লগ / ক্রোনটিতে অবস্থিত। ফেডোরা, সেন্টোস ইত্যাদির সাহায্যে আপনি ঠিক কী করতে চাইছেন তা বর্ণনা করতে আপনাকে সহায়তা করতে পারে যাতে লোকেরা কী চলছে তার একটি সম্পূর্ণ চিত্র রয়েছে।
rfelsburg

1

আপনার ক্রোনটবে:

* * * *  /usr/bin/chromium-browser_starter

তারপরে /usr/bin/chromium-browser_starter:

#!/bin/sh

# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).

for ((secs=0; secs<46; secs+=15)); do
    (sleep $secs; /usr/bin/chromium-browser "$@") &
done

wait

আমি যখন ps aux | grep chromএক মিনিটের পরে লিখি আমি ক্রোমিয়াম-ব্রাউজারটি চলমান দেখতে পাচ্ছি না।
xralf

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