আমার একটি স্ক্রিপ্ট রয়েছে যা প্রতি পাঁচ সেকেন্ডে চালানো দরকার। আমি জানি যে cron
মুহুর্তের মধ্যেই কাজগুলি করা যেতে পারে, তবে প্রতি সেকেন্ডে কিছু চালানোর কোনও উপায় আছে কি?
sleep 5
5 সেকেন্ডের জন্য বিরতি (সম্ভবত একটি লুপের মধ্যে) ...?
আমার একটি স্ক্রিপ্ট রয়েছে যা প্রতি পাঁচ সেকেন্ডে চালানো দরকার। আমি জানি যে cron
মুহুর্তের মধ্যেই কাজগুলি করা যেতে পারে, তবে প্রতি সেকেন্ডে কিছু চালানোর কোনও উপায় আছে কি?
sleep 5
5 সেকেন্ডের জন্য বিরতি (সম্ভবত একটি লুপের মধ্যে) ...?
উত্তর:
ক্রোন কেবল সর্বনিম্ন এক মিনিটের জন্য অনুমতি দেয়। আপনি যা করতে পারেন তা হ'ল একটি অসীম লুপের সাহায্যে একটি শেল স্ক্রিপ্ট লিখুন যা আপনার কাজটি চালায় এবং তারপরে 5 সেকেন্ডের জন্য ঘুমায় s এইভাবে আপনার টাস্কটি কত বেশি সময় নেয় তার উপর নির্ভর করে প্রতি 5 সেকেন্ডে কম বেশি চালানো হবে।
#!/bin/bash
while true; do
# Do something
sleep 5;
done
আপনি একটি তৈরি করতে পারেন my-task.sh
উপরে বিষয়বস্তু সঙ্গে ফাইল এবং সঙ্গে এটি চালানোর sh my-task.sh
। Ptionচ্ছিকভাবে আপনি এটিকে supervisor
পরিষেবা হিসাবে কনফিগার করতে পারেন যাতে এটি শুরু হবে যখন সিস্টেম বুট হবে ইত্যাদি would
এটি সত্যিই এমন শোনাচ্ছে যা আপনি এমন কিছু করছেন যা সম্ভবত আপনার করা উচিত নয়। এটি ভুল অনুভব করে ।
আপনি 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 সেকেন্ড চালানোর প্রয়োজন?
/media
স্বয়ংক্রিয় ব্যাকআপের জন্য ইউএসবিতে প্লাগ ইন করা একটি ড্রাইভের জন্য ডিরেক্টরিটি বার বার পরীক্ষা করে দেখায় ...
What on EARTH
- পরিসংখ্যান, আবর্জনা সংগ্রহ, ফাইল সিঙ্ক, অনলাইন স্থিতি, আপনি এটির নাম দিন।
কেবল একটি লুপ ব্যবহার করুন:
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। আমার কমান্ডটি দ্রুত চলে তাই এটি অগ্রভাগে চালিত হলে ঠিক আছে।
./your-script
পটভূমিতে চালানোর দরকার হয় (৫-সেকেন্ডের ঘুমের সময়), আপনি এটি রেখে দিতে পারেন &
তবে ছাড়তে পারেন ;
। &
কমান্ডগুলি পৃথক করার উদ্দেশ্য হিসাবে , এটি ;
একই লাইনে থাকা অপ্রয়োজনীয় (এবং দৃশ্যত অনুমোদিত নয়) । আরেকটি উপায় হ'ল একাধিক লাইনে লুপটি লিখুন (পরে &
লাইন ব্রেক পরে do
এবং optionচ্ছিকভাবে লাইন পরে এবং এর আগেও বিরতি হয় done
)। যেহেতু ;
পর &
একটি টাইপো উপস্থিত হতে পারে, আমি এটা সরিয়েছি। নীল বর্ণের: ;
আপনি যদি সত্যিই এটি চান তবে পিছনে পিছনে নির্দ্বিধায় অনুভব করুন ; যদি তা হয় তবে আমি একটি ব্যাখ্যা যুক্ত করার পরামর্শ দিই।
আপনি GNU প্যাকেজ ম্যাক্রন ব্যবহার করতে পারেন , এটি একটি "ভিক্সি ক্রোন" বিকল্প।
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"সূক্ষ্ম সময়-পয়েন্টগুলি নির্দিষ্ট করে অর্থাত সেকেন্ডের জন্য সহজেই মঞ্জুরি দিতে পারে principle নীতিগতভাবে এটি মাইক্রোসেকেন্ডগুলিতে প্রসারিত হতে পারে, তবে এটি কার্যকর হয় না"
mcron
sendmail
ডিফল্টরূপে ইনস্টল এবং সক্রিয় করা দরকার । কিভাবে এটি অক্ষম করবেন?
ক্রোনে সর্বনিম্ন কনফিগারেশনটি মিনিট, আপনি এটি 5 সেকেন্ডের জন্য সেট করতে পারবেন না। আপনি কোয়ার্টজ ব্যবহার করতে পারেন যা সেকেন্ডের অনুমতি দেয়। http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
রাউটার এবং স্যুইচ নিরীক্ষণের জন্য ক্যাকটি ব্যবহার করুন, তবে ক্রোন কেবল সর্বনিম্ন এক মিনিটের জন্য অনুমতি দেয়, সুতরাং যদি কোনও পোর্ট / ডিভাইস ডাউন হয় তবে দুই মিনিট পূর্ব পর্যন্ত কোনও সতর্কতা নেই।
আপনি একটি সিস্টেমডি টাইমার ইউনিট ব্যবহার করতে পারেন, যা একটি পরিষেবা ট্রিগার করবে - যা আপনি যা চান তা করতে প্রতি সেট করেন - প্রতি 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
তারপরে সিস্টেমেড কনফিগারেশনটি পুনরায় লোড করুন, টাইমার ইউনিট সক্ষম করুন এবং এটি শুরু করুন।
আমি এই ধরণের জিনিসটি খুব সাফল্যের সাথে সম্পন্ন করেছি (এবং শেষ ফলাফলটি একসাথে সপ্তাহগুলি ছড়িয়ে দেয়, যতক্ষণ না মেশিনটি রিবুট হয়। আমি এখনই যা করছিলাম তার জন্য তথ্য আপডেট করে এটিকে ক্যাশে রেখেছি - প্রতি 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' স্ক্রিপ্টটি পুনরায় চালু করে, তবে চলমান স্ক্রিপ্টটি প্রতিস্থাপন করে। এটি প্রাথমিকভাবে একটি ক্রন্টব '@ রিবুট' লাইন দিয়ে শুরু করা যেতে পারে।
while
বারবার স্ক্রিপ্টটি পুনরায় চালু করার পরিবর্তে একটি লুপ ব্যবহার করবেন না কেন ?