मैं बैकग्राउंड जॉब के रूप में `watch` कैसे चला सकता हूं?


19

जब मैं चलता हूं:

watch 'cmd >> output.txt' &

कार्य प्रणाली द्वारा निलंबित हो जाता है:

3569 स्टॉप्ड (tty आउटपुट)

क्या आसपास कोई काम है?

जवाबों:


26

इसका उद्देश्य watchकमांड के परिणामों को पूर्ण-स्क्रीन दिखाना और लगातार अपडेट करना है; यदि आप आउटपुट को किसी फ़ाइल में रीडायरेक्ट कर रहे हैं और इसे बैकग्राउंड कर रहे हैं तो वास्तव में पहली जगह में घड़ी का उपयोग करने का कोई कारण नहीं है।

यदि आप देरी के साथ बार-बार कमांड चलाना चाहते हैं ( watchडिफ़ॉल्ट रूप से दो सेकंड प्रतीक्षा करता है), तो आप कुछ इस तरह का उपयोग कर सकते हैं:

while true; do
    cmd >> output.txt
    sleep 2
done

हालांकि गैर-अवरुद्ध फैशन में ऐसा करने का एक तरीका है? उदाहरण के लिए अगर मैं इसे और अन्य कमांड एक ही बैश स्क्रिप्ट में रखना चाहता हूं, और क्या यह इसके बाद आने वाले कोड को चलाना जारी रखता है (जबकि पृष्ठभूमि में ऐसा करते हुए भी)?
ऑस्टिन

14

यहाँ एक तरीका है:

watch -n 1 'date' &>/dev/null &

चूंकि आप प्रक्रिया को पृष्ठभूमि में रखते हैं, इसलिए हम मान सकते हैं कि आपको टर्मिनल डिस्प्ले की आवश्यकता नहीं है और आप किसी फ़ाइल पर रीडायरेक्ट कर रहे हैं। यदि आप ऐसा करते हैं, तो आप watchबिना किसी समस्या के पृष्ठभूमि के लिए सक्षम होंगे ।

sleepके रूप में माइकल Mrozek द्वारा सुझाव दिया, धीरे-धीरे अंतराल होगा जो अवांछनीय हो सकता है। एक जटिल शेल स्क्रिप्ट के अलावा जो सिस्टम के समय की निगरानी करता है और बीते हुए समय के आधार पर एक कमांड निष्पादित करता है, watch -pसटीक टाइमिंग के लिए एक अच्छा विकल्प हो सकता है।

सटीक समय के लिए:

watch -n 1 -p 'date' &>/dev/null &

क्षमा करें, यह कैसे काम करता है? केवल &दो बार उपयोग करना क्यों संभव है ?
फिल्पस

man bashपहले कैसे &काम करता है, यह देखने के लिए पाइपलाइन अनुभाग पढ़ें । ;)
मियो रिन

11

मुझे आपकी प्रेरणाओं पर यकीन नहीं है, लेकिन शायद यह पर्याप्त होगा?

while true; do sleep 2; cmd >>output.txt; done &

अन्यथा, कृपया स्पष्ट करें कि आपको वास्तव में इसकी आवश्यकता क्यों है watch


2

teeआपका दोस्त है। उदाहरण के लिए, यहां बताया गया है कि आप वर्तमान निर्देशिका में फ़ाइलों की संख्या कैसे दिखा सकते हैं और इसे प्रत्येक 2 सेकंड में गिनने के लिए जोड़ सकते हैं।

watch 'find . -maxdepth 1 -printf " " | wc -c | tee --append count.txt'

2

आपकी प्रेरणाओं पर निर्भर करता है:

  • आप समय-समय पर कुछ चलाना चाहते हैं। तब आप सीधे क्रोन का उपयोग कर सकते थे। (यदि आपके उद्देश्यों के लिए 1 मिनट की समय ग्रैन्युलैरिटी पर्याप्त है)

    • नोट: यदि अंतराल बहुत कम है या डिवाइस बहुत विवश है, और जब तक आप crond से कम संदेशों को लॉग करने के लिए syslog को कॉन्फ़िगर नहीं करते हैं, यह आपके syslog को बहुत जल्दी भर देगा।
  • आप केवल बार-बार कुछ चलाना चाहते हैं:

    while sleep 2 ; do
      cmd
    done >& log.txt

    (आप इसे उदाहरण के लिए क्रॉस्टैब से चला सकते हैं, हालांकि स्क्रिप्ट का उपयोग करना अत्यधिक अनुशंसित है)।

  • आप समय-समय पर एक कमांड चलाना चाहते हैं और इसके अंतिम निष्पादन के आउटपुट तक पहुंच रखते हैं।

    • आप एक रम्फ को आउटपुट लिख सकते हैं (पहले स्क्रिप्ट को संशोधित करते हुए):

      while sleep 2 ; do
        cmd >& last_execution.log
      done 

      या इससे भी बेहतर:

      while sleep 2 ; do
        cmd >& last_execution.log.tmp 
        mv last_execution.log.tmp last_execution.log ## atomically
      done 
    • आप गठबंधन कर सकते हैं screenऔर watch, ताकि आप हमेशा नवीनतम स्थिति की जांच कर सकें, जब तक कि यह एक स्क्रीनफुल में फिट न हो जाए:

      screen watch -n 3660 ./make-backup.sh

1

आप स्क्रीन कमांड का उपयोग कर सकते हैं।

http://www.cyberciti.biz/tips/linux-screen-command-howto.html


स्क्रीन के साथ आप बैकग्राउंड टर्मिनल सेशन बना सकते हैं, इसे बंद कर सकते हैं और जरूरत पड़ने पर खोल सकते हैं।
रॉबर्टो

0

यदि आप का उपयोग करना चाहिए watch- बस माइक dangelo और l0b0 से जवाब गठबंधन

watch -n 1 'cmd | tee -a output.txt' &>/dev/null &

जैसे

watch -n 1 'date | tee -a output.txt' &>/dev/null &

फिर सेकंड्स को देखें

tail -f output.txt

0

वॉच को स्क्रीन के आउटपुट के लिए डिज़ाइन किया गया है, लेकिन यह आउटपुट रीडायरेक्ट किया जा सकता है (दोनों stdout और stderr) तब यह बैकग्राउंड में चलेगा।

watch 'date >>fa' >/dev/null 2>/dev/null &
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.