मेरे पास एक स्क्रिप्ट है जिसे हर पांच सेकंड में चलाने की जरूरत है। मुझे पता है कि cron
मिनटों से कार्य कर सकते हैं, लेकिन क्या हर सेकंड कुछ चलाने का एक तरीका है?
sleep 5
5 सेकंड के लिए विराम (शायद एक लूप के भीतर) ...?
मेरे पास एक स्क्रिप्ट है जिसे हर पांच सेकंड में चलाने की जरूरत है। मुझे पता है कि cron
मिनटों से कार्य कर सकते हैं, लेकिन क्या हर सेकंड कुछ चलाने का एक तरीका है?
sleep 5
5 सेकंड के लिए विराम (शायद एक लूप के भीतर) ...?
जवाबों:
क्रोन केवल एक मिनट के लिए अनुमति देता है। आप जो कर सकते थे , वह एक अनन्त लूप के साथ एक शेल स्क्रिप्ट लिखी गई है जो आपके कार्य को चलाता है, और फिर 5 सेकंड के लिए सोता है। इस तरह से आपका कार्य हर 5 सेकंड में कम या ज्यादा चलाया जाएगा, जो इस बात पर निर्भर करता है कि कार्य कितना समय लेता है।
#!/bin/bash
while true; do
# Do something
sleep 5;
done
आप my-task.sh
ऊपर दी गई सामग्री के साथ एक फ़ाइल बना सकते हैं और इसे चला सकते हैं sh my-task.sh
। वैकल्पिक रूप से आप इसे supervisor
एक सेवा के रूप में कॉन्फ़िगर कर सकते हैं ताकि यह सिस्टम बूट आदि के समय शुरू हो जाए।
यह वास्तव में ध्वनि करता है जैसे आप कुछ ऐसा कर रहे हैं जो आपको संभवतः नहीं करना चाहिए। यह गलत लगता है ।
आपके पास 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) &
हालांकि, मेरा सवाल यह है कि EARTH पर क्या आप ऐसा कर सकते हैं जिसे हर 5 सेकंड में चलाने की आवश्यकता है?
/media
एक ड्राइव के लिए निर्देशिका की जांच करती है जिसे मैं स्वचालित बैकअप के लिए USB में प्लग करता हूं ...
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
पृष्ठभूमि में (5-सेकंड की नींद के दौरान) दौड़ने की आवश्यकता थी , तो आप रख सकते हैं &
लेकिन छोड़ सकते हैं ;
। जैसा &
कि आदेशों को अलग करने के उद्देश्य से किया गया है, यह अनावश्यक (और जाहिर तौर पर अनुमति नहीं है) ;
एक ही लाइन पर इसके बाद है। एक और तरीका है लूप को कई लाइनों में लिखना (एक लाइन ब्रेक के बाद &
और, वैकल्पिक रूप से, लाइन ब्रेक के बाद do
और पहले done
भी)। के बाद से ;
के बाद &
लिखने में कोई त्रुटि हो गया लगता है, मैं इसे हटा दिया है। ब्ल्यूड: कृपया बेझिझक ;
वापस डाल दें यदि आप वास्तव में चाहते हैं; यदि हां, तो मेरा सुझाव है कि एक स्पष्टीकरण भी जोड़ा जाए।
आप GNU पैकेज mcron , "विक्सी क्रॉन" विकल्प का उपयोग कर सकते हैं ।
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"आसानी से बेहतर समय-बिंदुओं को निर्दिष्ट करने की अनुमति दे सकते हैं, यानी सेकंड। सिद्धांत रूप में इसे माइक्रोसेकंड तक बढ़ाया जा सकता है, लेकिन इसे लागू नहीं किया गया है।"
mcron
sendmail
डिफ़ॉल्ट रूप से स्थापित और सक्रिय करने की आवश्यकता है। इसे निष्क्रिय कैसे करें?
क्रोन में न्यूनतम कॉन्फ़िगरेशन मिनट है, आप इसे 5 सेकंड के लिए सेट नहीं कर सकते। आप क्वार्ट्ज का उपयोग कर सकते हैं जो सेकंड की अनुमति देता है। http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
राउटर और स्विच को मॉनिटर करने के लिए कैक्टि का उपयोग करें, लेकिन क्रोन केवल एक मिनट की न्यूनतम अनुमति देता है, इसलिए यदि एक पोर्ट / डिवाइस नीचे है, तो दो मिनट अतीत तक कोई चेतावनी नहीं है।
आप एक SystemD टाइमर यूनिट का उपयोग कर सकते हैं, जो एक सेवा को ट्रिगर करेगा - जिसे आप वह करना चाहते हैं जो आप चाहते हैं - हर 5 सेकंड में।
मान लें कि आपकी सेवा इकाई को कॉल किया गया है mystuff.service
और उसे स्थापित किया गया है /etc/systemd/system
( SystemD उपयोगकर्ता सेवाओं की जांच करें यदि आप किसी उपयोगकर्ता के crontab को बदलना चाहते हैं), तो आप बूट समय पर सेवा को चलाने के लिए एक टाइमर इकाई लिख सकते हैं और फिर हर 5 सेकंड में, इस तरह:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
फिर सिस्टमड कॉन्फ़िगरेशन को फिर से लोड करें, टाइमर यूनिट को सक्षम करें और इसे शुरू करें।
मैंने इस तरह की चीज़ को बहुत सफलतापूर्वक किया है (और मशीन को रिबूट होने तक, एक बार में अंतिम परिणाम रैंस सप्ताह)। जैसा कि मैं अभी कर रहा था, जानकारी अपडेट करना और इसे कैश में डालना - हर 10 सेकंड में अपडेट करना।
#!/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
'निष्पादित $ 0' स्क्रिप्ट को पुनरारंभ करता है, लेकिन चल रही स्क्रिप्ट को प्रतिस्थापित करता है। यह शुरुआत में एक क्रॉस्टैब '@reboot' लाइन के साथ शुरू किया जा सकता है।
while
पटकथा को फिर से शुरू करने के बजाय लूप का उपयोग क्यों नहीं किया जाता है?