কিভাবে প্রতি 5 সেকেন্ডে স্ক্রিপ্টগুলি চালানো যায়?


66

আমার একটি স্ক্রিপ্ট রয়েছে যা প্রতি পাঁচ সেকেন্ডে চালানো দরকার। আমি জানি যে cronমুহুর্তের মধ্যেই কাজগুলি করা যেতে পারে, তবে প্রতি সেকেন্ডে কিছু চালানোর কোনও উপায় আছে কি?


3
আপনি কোন সমস্যার সমাধান করার চেষ্টা করছেন? আপনি কি নিশ্চিত যে ক্রোনই সঠিক সমাধান?
andol

1
আমি জানি ক্রোন সঠিক সমাধান নয়। আমি বলছিলাম এটি প্রশ্নে ছিল না। দয়া করে পড়ুন. আমি প্রতি 5 সেকেন্ডে একটি স্ক্রিপ্ট চালানোর চেষ্টা করছি।
myusuf3

2
দুঃখিত, অনুমান করুন আমি প্রশ্নটি কিছুটা ভুল পেয়েছি। তবুও, এখনও ভাবছেন আপনি সঠিক সমস্যার সমাধান করার চেষ্টা করছেন কিনা।
andol

এখানে আসা লোকদের জন্য প্রতি 5 সেকেন্ডে কীভাবে কিছু চালানো যায় তা দেখছেন। আমি উদাহরণস্বরূপ সুপারিশ করছি পরিবর্তে আপনি উদাহরণস্বরূপ सॉকেট.আইওর মতো সরঞ্জামগুলির সাথে রিয়েলটাইম প্রোগ্রাম করার পদ্ধতিটি শেখার দিকে নজর দিন।
ব্র্যান্ডন বার্টেলসেন

আপনি কি বাশ স্লিপ কমান্ডটি আবিষ্কার করেছেন? sleep 55 সেকেন্ডের জন্য বিরতি (সম্ভবত একটি লুপের মধ্যে) ...?
এসডসোলার

উত্তর:


64

ক্রোন কেবল সর্বনিম্ন এক মিনিটের জন্য অনুমতি দেয়। আপনি যা করতে পারেন তা হ'ল একটি অসীম লুপের সাহায্যে একটি শেল স্ক্রিপ্ট লিখুন যা আপনার কাজটি চালায় এবং তারপরে 5 সেকেন্ডের জন্য ঘুমায় s এইভাবে আপনার টাস্কটি কত বেশি সময় নেয় তার উপর নির্ভর করে প্রতি 5 সেকেন্ডে কম বেশি চালানো হবে।

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

আপনি একটি তৈরি করতে পারেন my-task.shউপরে বিষয়বস্তু সঙ্গে ফাইল এবং সঙ্গে এটি চালানোর sh my-task.sh। Ptionচ্ছিকভাবে আপনি এটিকে supervisorপরিষেবা হিসাবে কনফিগার করতে পারেন যাতে এটি শুরু হবে যখন সিস্টেম বুট হবে ইত্যাদি would

এটি সত্যিই এমন শোনাচ্ছে যা আপনি এমন কিছু করছেন যা সম্ভবত আপনার করা উচিত নয়। এটি ভুল অনুভব করে ।


পিএইচপি ভিত্তিক স্ক্র্যাপারগুলিতে ব্যবহার করার জন্য একজনের প্রতি 5 বা তার চেয়ে কম সেকেন্ডে চলমান আ ক্রোন প্রয়োজন।
রবিশ কুমার

সত্যিই ভুল মনে হচ্ছে। যদি আপনি এটি ক্রোন চাকরিতে অন্তর্ভুক্ত করেন তবে আপনার প্রতি মিনিটে ওভারল্যাপিং কাজ থাকবে। এক ঘন্টা পরে 60 টি কাজ প্রতি 5 সেকেন্ডে শুরু হবে। আপনি যদি ক্রোন কাজের সাথে অন্তর্ভুক্ত না করেন তবে ভাল, আপনি কীভাবে এটি বন্ধ করবেন তা জানতে পারবেন না, এমনকি এটি বিদ্যমান রয়েছে তাও জানতে পারবেন।
SEF

35

আপনি cronপ্রতি মিনিটে একটি স্ক্রিপ্ট থেকে চাকুরী শুরু করতে পারেন যা 12 টি ব্যাকগ্রাউন্ড প্রক্রিয়া এভাবে শুরু করে:

* * * * * ~/dostuff.sh

dostuff.sh:

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &

আমার প্রশ্ন, যদিও, হয় পৃথিবীতে কি আপনি করছেন যেতে পারে যে প্রতি 5 সেকেন্ড চালানোর প্রয়োজন?


1
ঠিক আছে, এটি আমার কাজে এসেছিল যখন আমি একটি স্ক্রিপ্ট তৈরি করেছিলাম যা বারবার /mediaস্বয়ংক্রিয় ব্যাকআপের জন্য ইউএসবিতে প্লাগ ইন করা একটি ড্রাইভের জন্য ডিরেক্টরিটি বার বার পরীক্ষা করে দেখায় ...
ভিএফ 1

32
What on EARTH- পরিসংখ্যান, আবর্জনা সংগ্রহ, ফাইল সিঙ্ক, অনলাইন স্থিতি, আপনি এটির নাম দিন।
রুक्स

3
কাছের-রিয়েলটাইম ডেটার জন্য বাহ্যিক এপিআই উল্লেখ প্রতি 5 সেকেন্ডে চলমান অনুরোধটি প্রতিটি পৃষ্ঠাভিউতে করা থেকে ভাল।
সের্গে কুদরিয়াভসেভ

1
যদি ক্রোনটব দু'বার dostuff.sh ফাইলটি কার্যকর করে? উদাহরণস্বরূপ 55 তম সেকেন্ডে, স্ক্রিপ্টটি কার্যকর করা হয়েছে তবে এখনও শেষ হয়নি, তবে ক্রোন আবার স্ক্রিপ্টটি কল করে, কী হবে?
টমসওয়ায়ার

2
এইটা খারাপ! এটি স্ক্রিপ্টটি একবারে একাধিকবার চালিত করে (যদি এটি 5 সেকেন্ডের বেশি সময় নেয় তবে) অ্যাক্সেস করা কোনও (এমনকি অস্থায়ী) ফাইলগুলিতে রেসের শর্ত তৈরি করতে পারে। একই কাজ একই সময়ে দু'বার করার ফলে সমস্যা দেখা দিতে পারে! (এবং এটি সাধারণত হবে!)
ননি মজ

27

কেবল একটি লুপ ব্যবহার করুন:

while true ; do ./your-script & sleep 5; done

এটি আপনার স্ক্রিপ্টটি পটভূমির কাজ হিসাবে শুরু করবে, 5 সেকেন্ডের জন্য ঘুমাবে, তারপরে আবার লুপ করবে। আপনি এটি বাতিল করতে Ctrl-C ব্যবহার করতে পারেন বা এর পরিবর্তে অন্য কোনও শর্ত ব্যবহার করতে পারেন true, যেমন ! test -f /tmp/stop-my-scriptকেবলমাত্র লুপটি যখন ফাইলটির /tmp/stop-my-scriptঅস্তিত্ব নেই।


আমি যদি এম্পারস্যান্ড অন্তর্ভুক্ত করি তবে এটি বলছে bash: syntax error near unexpected token ';', তাই আমি এটি বাইরে নিয়ে এসেছি। আমার কাছে বশ রয়েছে 4.3.11। আমার কমান্ডটি দ্রুত চলে তাই এটি অগ্রভাগে চালিত হলে ঠিক আছে।
টাইলার কলিয়ার

1
@ টাইলারকোলিয়ার যদি আপনার ./your-scriptপটভূমিতে চালানোর দরকার হয় (৫-সেকেন্ডের ঘুমের সময়), আপনি এটি রেখে দিতে পারেন &তবে ছাড়তে পারেন ;&কমান্ডগুলি পৃথক করার উদ্দেশ্য হিসাবে , এটি ;একই লাইনে থাকা অপ্রয়োজনীয় (এবং দৃশ্যত অনুমোদিত নয়) । আরেকটি উপায় হ'ল একাধিক লাইনে লুপটি লিখুন (পরে &লাইন ব্রেক পরে doএবং optionচ্ছিকভাবে লাইন পরে এবং এর আগেও বিরতি হয় done)। যেহেতু ;পর &একটি টাইপো উপস্থিত হতে পারে, আমি এটা সরিয়েছি। নীল বর্ণের: ;আপনি যদি সত্যিই এটি চান তবে পিছনে পিছনে নির্দ্বিধায় অনুভব করুন ; যদি তা হয় তবে আমি একটি ব্যাখ্যা যুক্ত করার পরামর্শ দিই।
এলিয়াহ কাগন

এলিয়াকাগান এফডাব্লুআইডাব্লু, এটি জেডএসে কাজ করে (কোনও সিনট্যাক্স ত্রুটি নেই) তবে এটি সত্যিই প্রয়োজনীয় নয়। সম্পাদনার জন্য ধন্যবাদ!
নীল রঙের

10

আপনি GNU প্যাকেজ ম্যাক্রন ব্যবহার করতে পারেন , এটি একটি "ভিক্সি ক্রোন" বিকল্প।

http://www.gnu.org/software/mcron/manual/mcron.html#Top

"সূক্ষ্ম সময়-পয়েন্টগুলি নির্দিষ্ট করে অর্থাত সেকেন্ডের জন্য সহজেই মঞ্জুরি দিতে পারে principle নীতিগতভাবে এটি মাইক্রোসেকেন্ডগুলিতে প্রসারিত হতে পারে, তবে এটি কার্যকর হয় না"


আমি ঠিক তাই খুঁজছিলাম। ধন্যবাদ!
এসডসোলার

দয়া করে এখানে আমার প্রশ্নের উত্তর হিসাবে পোস্ট করুন: Askubuntu.com / প্রশ্নগুলি / 922216/… যাতে আমি আপনার উত্তরটি গ্রহণ করতে পারি।
এসডসোলার



mcronsendmailডিফল্টরূপে ইনস্টল এবং সক্রিয় করা দরকার । কিভাবে এটি অক্ষম করবেন?
ইহসান

2

ক্রোনে সর্বনিম্ন কনফিগারেশনটি মিনিট, আপনি এটি 5 সেকেন্ডের জন্য সেট করতে পারবেন না। আপনি কোয়ার্টজ ব্যবহার করতে পারেন যা সেকেন্ডের অনুমতি দেয়। http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html


দেখে মনে হচ্ছে কোয়ার্টজ ওপেন সোর্স নয়। এটা কি সঠিক?
txwikinger

এটির একটি মুক্ত উত্স সংস্করণ রয়েছে। এটির একটি পৃষ্ঠা নেই তবে কেবল ডাউনলোড পৃষ্ঠায় যান। আপনাকে ফর্মটি পূরণ করতে হবে না কেবল আমাকে ডাউনলোডে নিয়ে যেতে ক্লিক করুন।
কোডি হারলো

অন্তত 2018 হিসাবে ওপেন সোর্স মনে করা হয় github.com/quartz-scheduler/quartz
dogmatic69

2

রাউটার এবং স্যুইচ নিরীক্ষণের জন্য ক্যাকটি ব্যবহার করুন, তবে ক্রোন কেবল সর্বনিম্ন এক মিনিটের জন্য অনুমতি দেয়, সুতরাং যদি কোনও পোর্ট / ডিভাইস ডাউন হয় তবে দুই মিনিট পূর্ব পর্যন্ত কোনও সতর্কতা নেই।


1
কীভাবে এটি করবেন সে সম্পর্কে সুনির্দিষ্ট বিশদ সহ এটি উত্তর প্রসারিত করার জন্য আমি এই উত্তরটি সম্পাদনা করার পরামর্শ দিচ্ছি । (আরও দেখুন কীভাবে আমি একটি উত্তম উত্তর লিখব? জিজ্ঞাসা উবুন্টুকে কী ধরণের উত্তর সবচেয়ে মূল্যবান বলে মনে করা হয় সে সম্পর্কে সাধারণ পরামর্শের জন্য))
ডেভিড ফোস্টার

2

আপনি একটি সিস্টেমডি টাইমার ইউনিট ব্যবহার করতে পারেন, যা একটি পরিষেবা ট্রিগার করবে - যা আপনি যা চান তা করতে প্রতি সেট করেন - প্রতি 5 সেকেন্ডে।

মনে করুন আপনার সার্ভিস ইউনিটটি ডাকা হয়েছে mystuff.serviceএবং এটি ইনস্টল করা আছে /etc/systemd/system( যদি আপনি কোনও ব্যবহারকারীর ক্রন্টব প্রতিস্থাপন করতে চান তবে সিস্টেমডি ব্যবহারকারী পরিষেবাগুলি দেখুন ), তবে আপনি বুট সময় পরিষেবাটি চালনার জন্য টাইমার ইউনিট লিখতে পারেন এবং তারপরে প্রতি 5 সেকেন্ডে এভাবে লিখতে পারেন:

/etc/systemd/system/mystuff.timer

[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target

তারপরে সিস্টেমেড কনফিগারেশনটি পুনরায় লোড করুন, টাইমার ইউনিট সক্ষম করুন এবং এটি শুরু করুন।


1
এটি সর্বোত্তম সমাধান, একমাত্র ক্ষতি হ'ল ক্রোনটি ওভারভিউ এবং কনফিগার করা অনেক সহজ। সিস্টেমডি একটি ব্যথা এবং এটি এর ডিরেক্টরি কাঠামো দিয়ে শুরু হয়। 5 সেকেন্ডের ব্যবধানের জন্য এখনও সেরা
জন

উপরের স্নিপেটটি কি Mystuff.service এর পরিবর্তে /etc/systemd/system/mystuff.timer এ যাবে না?
ব্রুকস

@ ব্রুকস: হ্যাঁ, আমার খারাপ - খারাপ কপি এবং আমার পাশে পেস্ট করুন। সংশোধন করা হয়েছে।
গস

ধন্যবাদ ... আমি সিস্টেমড শিখতে গিয়ে আমি পাগল নই তা জানতে পেরে আনন্দিত :)
ব্রুকস

1

আমি এই ধরণের জিনিসটি খুব সাফল্যের সাথে সম্পন্ন করেছি (এবং শেষ ফলাফলটি একসাথে সপ্তাহগুলি ছড়িয়ে দেয়, যতক্ষণ না মেশিনটি রিবুট হয়। আমি এখনই যা করছিলাম তার জন্য তথ্য আপডেট করে এটিকে ক্যাশে রেখেছি - প্রতি 10 সেকেন্ডে আপডেট করা ating

#!/bin/sh

SLEEP=5

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# echo and restart...
exec $0

'Exec। 0' স্ক্রিপ্টটি পুনরায় চালু করে, তবে চলমান স্ক্রিপ্টটি প্রতিস্থাপন করে। এটি প্রাথমিকভাবে একটি ক্রন্টব '@ রিবুট' লাইন দিয়ে শুরু করা যেতে পারে।


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