जवाबों:
आप watch
कमांड का उपयोग कर सकते हैं , नियमित अंतराल पर किसी भी निर्दिष्ट कमांड को चलाने के लिए वॉच का उपयोग किया जाता है।
टर्मिनल खोलें और टाइप करें:
watch -n x <your command>
आप चाहते हैं कि सेकंड में समय बदलने के लिए एक्स ।
watch
आदेश और इसके विकल्पों का उपयोग करने में अधिक मदद के लिए , man watch
इस लिंक को चलाएं या जाएं ।
उदाहरण के लिए: निम्नलिखित सूचीबद्ध करेगा, प्रत्येक 60 के दशक में , एक ही टर्मिनल पर, डेस्कटॉप निर्देशिका की सामग्री ताकि आप जान सकें कि क्या कोई बदलाव हुआ है:
watch -n 60 ls -l ~/Desktop
watch
"इतिहास सक्षम" प्रकार कमांड के साथ उपयोग करने का कोई तरीका है ? मैं उपयोग watch
करना पसंद करता हूं , लेकिन कभी-कभी मैं पिछले निष्पादन के एक लॉग को भी देखना पसंद करता हूं, केवल पिछले एक के बजाय। और हाँ, मुझे पता है कि मैं इसे while true
पूरा करने के लिए स्क्रिप्टिंग ( ) का उपयोग कर सकता हूं , लेकिन watch
उपयोगिता का उपयोग करना बहुत साफ है!
आप इस आदेश का उपयोग टर्मिनल में, नक्स के उत्तर के अलावा कर सकते हैं:
while true; do <your_command>; sleep <interval_in_seconds>; done
उदाहरण
while true; do ls; sleep 2; done
यह कमांड ls
2 सेकंड के अंतराल पर आउटपुट प्रिंट करेगा ।
प्रक्रिया को रोकने के लिए Ctrl+ Cका उपयोग करें ।
की कुछ कमियां है watch
watch
एएनएसआई रंग अनुक्रमों का उपयोग करके -c
या --color
विकल्प से बचने वाले वर्णों की व्याख्या करेगा । उदाहरण के लिए आउटपुट का pygmentize
काम होगा लेकिन यह विफल हो जाएगा ls --color=auto
।उपरोक्त परिस्थितियों में यह एक बेहतर विकल्प के रूप में प्रकट हो सकता है।
watch
इसके लिए मौजूद है, यह थोड़ा बेकार है मैं कहूंगा
watch
ज्यादातर मामलों में अच्छा है। यही कारण है कि मैंने शुरुआत में "नक्स के जवाब के अलावा" का उल्लेख किया। लेकिन watch
उदाहरण के लिए कुछ समस्याएं हैं जिनके साथ कोई भी अन्य आदेशों का उपयोग नहीं कर सकता हैwatch
। उदाहरण के लिए ले लो, ll
जो अलियास है, ls -laF
लेकिन इसके साथ उपयोग नहीं किया जा सकता है watch
। साथ ही अगर किसी कमांड का आउटपुट काफी लंबा है तो आप स्क्रॉल करने में परेशानी में होंगे watch
। इन कुछ विशेष मामलों में यह उत्तर एक बेहतर विकल्प हो सकता है।
watch
कम से कम -c
या --color
रंगीन उत्पादन के विकल्प की अनुमति देता है ।
while sleep x
बेहतर है - इसे मारना आसान है।
watch
, यह कमांड इतिहास रखता है।
बस souravc और nux के उत्तरों को पिच करना चाहते थे :
watch
उबंटू पर पूरी तरह से काम करते समय , आप इससे बचना चाह सकते हैं कि यदि आप चाहते हैं कि आपका "यूनिक्स-फ़्यू" शुद्ध हो - उदाहरण के लिए फ्रीबीएसडी पर, वॉच "एक और ट्टी लाइन पर स्नूप" करने के लिए एक कमांड है।while true; do command; sleep SECONDS; done
एक चेतावनी भी है - CTR + C का उपयोग करके मारने के लिए आपका आदेश कठिन हो सकता है । आप पसंद कर सकते हैं while sleep SECONDS; do command; done
- यह न केवल कम है, बल्कि बाधित करने के लिए भी आसान है। चेतावनी यह है कि यह पहले सोएगा, फिर अपनी कमांड चलाएगा, इसलिए कमांड SECONDS
की पहली घटना होने से पहले आपको कुछ इंतजार करना होगा।sleep
में डालते हैं while
। मुझे कोई अंतर नहीं मिला, Ctrl + C ने लूप को तुरंत तोड़ दिया, इससे कोई फर्क नहीं पड़ता।
command
और सिर्फ आपकी हत्या करेगा और sleep
यदि आप मारेंगे तो ही टूटेंगे true
।
cron
डेमॉन के लिए आदर्श कार्य की तरह लगता है जो आवधिक आदेशों को चलाने की अनुमति देता है। crontab -e
अपने उपयोगकर्ता के क्रोन कॉन्फ़िगरेशन को संपादित करने के लिए कमांड चलाएं । इसका प्रारूप crontab (5) में प्रलेखित है । मूल रूप से आपके पास पांच समय से संबंधित, अंतरिक्ष-अलग-अलग फ़ील्ड हैं, जिसके बाद एक कमांड है:
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sunday, or use names)
उदाहरण के लिए, यदि आप प्रत्येक मंगलवार, सुबह 11 बजे पायथन स्क्रिप्ट चलाना चाहते हैं:
0 11 * * 1 python ~/yourscript.py
वहाँ भी कुछ विशेष नाम उस समय की तरह की जगह, कर रहे हैं @reboot
। यदि आपको एक अस्थायी निर्देशिका बनाने की आवश्यकता है तो बहुत उपयोगी है। मेरे कॉन्ट्राब (साथ सूचीबद्ध crontab -l
) से:
# Creates a temporary directory for ~/.distcc at boot
@reboot ln -sfn "$(mktemp -d "/tmp/distcc.XXXXXXXX")" "$HOME/.distcc"
cron
टर्मिनल के बजाय पर्दे के पीछे चलता है
यदि आप फ़ाइल सिस्टम की निगरानी कर रहे हैं, तो inotifywait
शानदार है और निश्चित रूप से आपके सिस्टम पर कम लोड जोड़ता है।
उदाहरण :
में 1 टर्मिनल यह आदेश लिखें:
$ inotifywait .
तब में 2 टर्मिनल, वर्तमान निर्देशिका को प्रभावित करता है कि किसी भी आदेश,
$ touch newfile
तब मूल टर्मिनल inotifywait में जाग जाएगा और घटना की रिपोर्ट करेगा
./ CREATE newfile2
या एक पाश में
$ while true ; do inotifywait . ; done
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ DELETE newfile
Setting up watches.
Watches established.
./ CREATE,ISDIR newdir
Setting up watches.
Watches established.
grep something InALogFile|less
कि एक स्क्रिप्ट?
.
मैं कमान नहीं छोड़ सकता।
-m
बिना लूप के लगातार मॉनिटर को जोड़ सकते हैं ।
आप repeat
निम्न चरणों का पालन करते हुए अपनी खुद की कमांड बना सकते हैं ; यहाँ क्रेडिट :
सबसे पहले, अपनी .bash_aliases
फ़ाइल खोलें :
$ xdg-open ~/.bash-aliases
दूसरा, इन पंक्तियों को फ़ाइल के नीचे चिपकाएँ और सहेजें:
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
तीसरा, या तो बंद करें और फिर से अपना टर्मिनल खोलें, या टाइप करें:
$ source ~/.bash_aliases
Et voilà! अब आप इसे इस तरह से उपयोग कर सकते हैं:
$ repeat 5 echo Hello World !!!
या
$ repeat 5 ./myscript.sh
आप crontab का उपयोग कर सकते हैं। कमांड चलाएं crontab -e
और इसे अपने पसंदीदा टेक्स्ट एडिटर से खोलें, फिर इस लाइन को जोड़ें
*/10 * * * * /path-to-your-command
यह हर 10 मिनट में आपकी कमांड चलाएगा
* */4 * * * /path-to-your-command
इससे आपकी कमांड हर 4 घंटे में चलेगी
$ ..some command...; for i in $(seq X); do $cmd; sleep Y; done
दोहराने के लिए एक्स की संख्या।
Y समय दोहराने की प्रतीक्षा करें।
उदाहरण :
$ echo; for i in $(seq 5); do $cmd "This is echo number: $i"; sleep 1;done
ऊपर प्रस्तावित "घड़ी" दृष्टिकोण के साथ एक और चिंता का विषय यह है कि यह प्रक्रिया को पूरा करने के बाद ही परिणाम प्रदर्शित करता है। "दिनांक; नींद ५ date; तारीख" २ तारीख को केवल ५ ९ सेकंड के बाद प्रदर्शित किया जाएगा ... यदि आप ४ मिनट से कुछ चलाना शुरू करते हैं, तो धीरे-धीरे सामग्री के कई पृष्ठों को प्रदर्शित करते हैं, आप वास्तव में इसे नहीं देखेंगे।
दूसरी ओर, "जबकि" दृष्टिकोण के साथ चिंता यह है कि यह कार्य अवधि को ध्यान में नहीं रखता है।
while true; do script_that_take_between_10s_to_50s.sh; sleep 50; done
इसके साथ, स्क्रिप्ट हर मिनट कभी-कभी चलेगी, कभी-कभी 1m40 लग सकती है। यहां तक कि अगर एक क्रोन इसे हर मिनट चलाने में सक्षम होगा, यहां, यह नहीं होगा।
इसलिए शेल पर आउटपुट को देखने के लिए जैसा कि यह उत्पन्न होता है और सटीक अनुरोध समय की प्रतीक्षा करता है, आपको समय से पहले और बाद में देखने की आवश्यकता है, और थोड़ी देर के साथ लूप।
कुछ इस तरह:
while ( true ); do
echo Date starting `date`
before=`date +%s`
sleep `echo $(( ( RANDOM % 30 ) + 1 ))`
echo Before waiting `date`
after=`date +%s`
DELAY=`echo "60-($after-$before)" | bc`
sleep $DELAY
echo Done waiting `date`
done
यह इसका उत्पादन करेगा:
जैसा कि आप देख सकते हैं, कमांड हर मिनट चलती है:
Date starting Mon Dec 14 15:49:34 EST 2015
Before waiting Mon Dec 14 15:49:52 EST 2015
Done waiting Mon Dec 14 15:50:34 EST 2015
Date starting Mon Dec 14 15:50:34 EST 2015
Before waiting Mon Dec 14 15:50:39 EST 2015
Done waiting Mon Dec 14 15:51:34 EST 2015
तो बस "नींद echo $(( ( RANDOM % 30 ) + 1 ))
" कमांड को आप जो चाहते हैं उसके साथ बदलें और जो कि टर्मिनल / शेल पर, बिल्कुल हर मिनट में चलाया जाएगा। यदि आप एक और शेड्यूल चाहते हैं, तो बस "60" सेकंड को कभी भी आपकी ज़रूरत के हिसाब से बदल दें।
डिबग लाइनों के बिना छोटा संस्करण:
while ( true ); do
before=`date +%s`
sleep `echo $(( ( RANDOM % 30 ) + 1 ))` # Place you command here
after=`date +%s`
DELAY=`echo "60-($after-$before)" | bc`
sleep $DELAY
done
watch -n 1 'echo $COLUMNS'
और उसके बीच अंतर की कोशिश करेंwatch -n 1 echo $COLUMNS
- पूर्व का विस्तार हर सेकंड में किया जाता है, लेकिन उत्तरार्द्ध का विस्तार केवल एक बार शुरू होने से पहले कियाwatch
जाता है।