लिनक्स में स्वचालित रूप से कमांड दोहराएं


303

क्या लिनक्स कमांड लाइन में हर n सेकंड में एक कमांड दोहराना संभव है ?

कहो, मेरे पास एक आयात चल रहा है, और मैं कर रहा हूं

ls -l

जाँच करें कि क्या फ़ाइल का आकार बढ़ रहा है। मैं इस आदेश को अपने आप दोहराना चाहूंगा।

जवाबों:


541

हर 5 सेकंड में देखें ...

watch -n 5 ls -l

यदि आप परिवर्तनों की दृश्य पुष्टि करना चाहते हैं, --differencesतो lsकमांड से पहले जोड़ें ।

OSX मैन पेज के अनुसार, वहाँ भी है

- संचयी विकल्प "चिपचिपा" को उजागर करता है, जो कभी भी बदले गए सभी पदों के चल रहे प्रदर्शन को प्रस्तुत करता है। -T या --no-title विकल्प डिस्प्ले के शीर्ष पर अंतराल, कमांड और वर्तमान समय दिखाते हुए हेडर को बंद कर देता है, साथ ही साथ निम्न ब्लैंक लाइन भी।

लिनक्स / यूनिक्स मैन पेज यहां पाया जा सकता है


4
इसके बारे में अच्छा - किटी को कमांड लाइन के परिणामों को लागू नहीं करने के लिए
मार्टी वालेस

1
जवाब में विकल्प जोड़ा गया है जो परिवर्तनों को उजागर करने की अनुमति देता है
रॉकोड

3
ध्यान दें कि आपको विशेष वर्णों से बचने की आवश्यकता है जो आपके द्वारा देखे जा रहे कमांड का हिस्सा हैं: watch mysql dbname -e \"show processlist\;\"
pfrenssen

11
brew install watch
जोश अनगर

1
घड़ी मैक ओएस एक्स 10.10 पर स्थापित नहीं है
जोओ ट्यून्स

118
while true; do
    sleep 5
    ls -l
done

10
watchस्क्रीन को साफ़ करने का दुर्भाग्यपूर्ण दुष्प्रभाव भी है, इसलिए कभी-कभी लूप उपयोगी होता है। उपयोग करने के लिए जो आउटपुट के वांछित प्रारूप पर निर्भर करता है।
विलियम पर्सेल ने

मैं आमतौर पर लूप करता हूं, लेकिन एक लाइन पर करता हूं। घड़ी बहुत बेहतर लगती है, हालांकि, मुझे उस पर स्विच करना होगा।
डॉन ब्रैनसन

1
@MartyWallace यह कमांड लाइन (जबकि लूप) के साथ किया जा सकता है।
कीसर

यह ध्यान देने योग्य है कि आप --differencesउन्हें हाइलाइट करने के लिए उपयोग कर सकते हैं (यदि आप टर्मिनल को फिर से तैयार करने के बारे में चिंतित हैं)
21

इससे बेहतर है watch। उदाहरण के लिए घड़ी तब काम नहीं करती जब आप प्रत्येक मंगलाचरण में यादृच्छिक संख्या उत्पन्न करना चाहते हैं, जैसे watch -n 1 echo ${RANDOM}। यादृच्छिक केवल एक बार बुलाया जाएगा।
मार्सिन

92

"घड़ी" बिजीबॉक्स में एक सेकंड के अंशों की अनुमति नहीं देता है, जबकि "नींद" करता है। अगर यह आपके लिए मायने रखता है, तो यह कोशिश करें:

while true; do ls -l; sleep .5; done

1
यह उपयोगी है अगर आपको कहीं से आउटपुट को पाइप करने की आवश्यकता है (जैसे बार एन्ट्रेस पुनरावर्ती)
स्टीफन स्मिथ

1
धन्यवाद। यह बिजीबॉक्स कंसोल के लिए काम करता है जिसमें वॉच कमांड नहीं है। मैंने इसे अपने सिस्टम के अपटाइम को मापने के लिए इस्तेमाल किया: जबकि सच; ऊपर करो; नींद 1; किया
सैंटियागो विलाफुर्ते

एफडब्ल्यूआईडब्ल्यू बिजीबॉक्स के पुराने संस्करण (v1.11.2) के साथ मैं फंस गया हूं, कोई घड़ी नहीं है, और नींद अंशों का समर्थन नहीं करती है। लेकिन आप नींद 1 का सफलतापूर्वक उपयोग कर सकते हैं।
मूडबुक

इसे साइबरविन
ब्रैडली

34

sleepपहले से ही लौटता है 0। जैसे, मैं उपयोग कर रहा हूँ:

while sleep 3 ; do ls -l ; done

यह मिखाइल के घोल से थोड़ा छोटा है। एक छोटी सी खामी यह है कि यह पहली बार लक्ष्य कमांड चलाने से पहले सोता है।


18

यदि कमांड में कुछ विशेष वर्ण जैसे पाइप और उद्धरण शामिल हैं, तो कमांड को उद्धरण के साथ गद्देदार करने की आवश्यकता है। उदाहरण के लिए, दोहराने के लिए, ls -l | grep "txt"घड़ी कमांड होनी चाहिए:

watch -n 5 'ls -l | grep "txt"'


मुझे
पाईपेड

13

जब हम साथ जाते हैं तो समय-समय पर क्रोन के बिना कमांड चलाना संभव होता है while

एक आदेश के रूप में:

while true ; do command ; sleep 100 ; done &
[ ex: # while true;  do echo `date` ; sleep 2 ; done & ]

उदाहरण:

while true
do echo "Hello World"
sleep 100
done &

आखिरी &को मत भूलना क्योंकि यह आपके पाश को पृष्ठभूमि में रखेगा। लेकिन आपको "ps -ef | grep your_script" कमांड के साथ प्रोसेस आईडी ढूंढनी होगी, फिर आपको इसे मारना होगा। इसलिए कृपया स्क्रिप्ट चलाते समय 'और' जोड़ें।

# ./while_check.sh &

यहां स्क्रिप्ट के समान ही लूप है। फ़ाइल बनाएँ "जबकि_चेक करें" और इसे इसमें डालें:

#!/bin/bash
while true; do 
    echo "Hello World" # Substitute this line for whatever command you want.
    sleep 100
done

फिर इसे टाइप करके चलाएं bash ./while_check.sh &


अंतिम और समान नहीं है, जैसे कि कमांड को बिना & अंत में लिखना, लेकिन स्क्रिप्ट को &: bash ./ORE_check.sh & के साथ कॉल करना?
रंश

@ransh: हम स्क्रिप्ट को चला सकते हैं। / फिर_check.sh और इसलिए हम तुरंत प्रक्रिया आईडी प्राप्त कर सकते हैं, जब हम स्क्रिप्ट में & जोड़ते हैं और स्क्रिप्ट को बिना चलाए & हमें कोई प्रक्रिया आईडी नहीं मिली, लेकिन यह चलेगी पृष्ठभूमि, जैसा कि मैंने संपादित किया, अगर हमें स्क्रिप्ट को रोकने की आवश्यकता है तो प्रक्रिया आईडी प्राप्त करने के लिए हमें ps कमांड की आवश्यकता है।
रंजीथकुमार टी

यदि आप चाहें, तो आप echo $!प्रत्येक पृष्ठभूमि प्रक्रिया शुरू होने के बाद स्क्रिप्ट को संशोधित कर सकते हैं - वह पृष्ठभूमि में लॉन्च की गई अंतिम बाल प्रक्रिया का पीआईडी ​​है।
जोनाथन लेफ्लर ने

echo `date` सिर्फ लिखने के लिए एक गरीब और थोड़ा छोटा रास्ता है date। (बग को तर्क के उद्धरण की कमी के साथ क्या करना है echo।) का भी बेकार उपयोगecho
त्रिवेणी


6

यदि आप "बहती" से बचना चाहते हैं, तो इसका मतलब है कि आप कमांड को हर N सेकंड को निष्पादित करना चाहते हैं, भले ही कमांड कितनी देर लगे (यह मानते हुए कि इसे N सेकंड से कम समय लगता है), यहां कुछ बैश हैं जो हर 5 सेकंड में एक के साथ कमांड को दोहराएगा- दूसरी सटीकता (और अगर यह नहीं रख सकता है तो एक चेतावनी प्रिंट करेगा):

PERIOD=5

while [ 1 ]
do
    let lastup=`date +%s`
    # do command
    let diff=`date +%s`-$lastup
    if [ "$diff" -lt "$PERIOD" ]
    then
        sleep $(($PERIOD-$diff))
    elif [ "$diff" -gt "$PERIOD" ]
    then
        echo "Command took longer than iteration period of $PERIOD seconds!"
    fi
done

यह अभी भी एक छोटे से बहाव हो सकता है क्योंकि नींद केवल एक सेकंड के लिए सटीक है। दिनांक आदेश के रचनात्मक उपयोग से आप इस सटीकता में सुधार कर सकते हैं।


धन्यवाद .. लेकिन मेरे 2 सवाल हैं, 1- उस कोड को कहाँ सहेजना है? दूसरे शब्द में, उस स्क्रिप्ट को किस पथ में रखना चाहिए? कि यह स्वचालित रूप से चलाता है ?! 2- अपने सभी कोड को टाइप करने के बजाय php फाइल को (# do कमांड) कैसे शामिल करें?
होसम

1
मैं आपको बैश लिपियों पर थोड़ा शोध करने का सुझाव देता हूं ताकि आप उन्हें और आगे कैसे चलाएं इसकी मूल बातें समझ सकें।
mcote

4

यदि आप किसी विशिष्ट समय में कुछ करना चाहते हैं तो आप हमेशा ऐसा कर सकते हैं:

repeat 300 do my first command here && sleep 1.5

8
बैश डू for x in {1..300} ; do कमांड्स के लिए ||break;sleep 1.5; done
जैसन

4

आप निम्न को चला सकते हैं और केवल आकार को फ़िल्टर कर सकते हैं। यदि आपकी फ़ाइल को कॉल किया गया था somefilenameतो आप निम्न कार्य कर सकते हैं

while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done

कई विचारों में से एक।


2

बहाव को अधिक आसानी से कम करने के लिए, उपयोग करें:

while :; do sleep 1m & some-command; wait; done

लूप संरचना को चलाने के लिए बैश समय और वास्तव में निष्पादित करने के लिए नींद की आज्ञा के कारण अभी भी थोड़ी मात्रा में बहाव होगा।

संकेत: ':' 0 के बराबर है।


1
watch -n 5 'ls -l 

दौड़ेगाls -l हर 5s के बाद आदेश

आउटपुट: -

Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017

total 169548
-rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
-rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
-rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
-rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
-rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
-rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
-rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
-rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
-rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
-rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
-rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
-rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
-rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop

1

एक संक्षिप्त समाधान, जो विशेष रूप से उपयोगी है यदि आप कमांड को बार-बार चलाना चाहते हैं जब तक कि यह विफल न हो, और आपको सभी आउटपुट देखने देता है।

while ls -l; do
    sleep 5
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.