2015-08-27 5 views
5

बंद करने के बाद पृष्ठभूमि में चल रही प्रक्रिया टर्मिनल बंद करने के बाद भी मैं पृष्ठभूमि में एक स्क्रिप्ट चलाने की कोशिश कर रहा हूं। मैंने खोज और खोज की है और nohup और disown की कोशिश की है लेकिन न ही काम कर रहा है। जब मैं टर्मिनल विंडो बंद करता हूं, तो मुझे सामान्य Closing this window will terminate the running processes: watch. संदेश मिलता है। यह nohup या disown का उपयोग करते समय भी मेरी पृष्ठभूमि प्रक्रिया को समाप्त कर देता है। क्या समस्या हो सकती है?टर्मिनल

मेरे कोड, एक साधारण दो पंक्तियों

cmd="nohup watch -n 1 sudo /etc/block.sh > /dev/null" 
$cmd & # blocks automatically 

यह .bash_profile में स्थित है, क्योंकि मैं इसे शुरू करने के लिए जब भी मैं एक नए टर्मिनल खोलने चाहते हैं।

आप सूडो को अनदेखा कर सकते हैं; मुझे पासवर्ड दर्ज किए बिना एक सूडो कमांड निष्पादित करने का एक तरीका मिल गया है।

मै मैक ओएसएक्स का उपयोग कर रहा हूं।

+0

रणनीतिक रूप से प्रासंगिक: http://mywiki.wooledge.org/BashFAQ/050 – tripleee

+0

हर बार जब आप एक नया खोल लॉन्च करते हैं तो एक नई प्रक्रिया शुरू होती है जैसे एक भयानक विचार। – tripleee

+0

@ ट्रिपली मुझे इसके साथ सुरक्षा मुद्दों के बारे में पता है। लेकिन इससे पहले कि मैं इसे संबोधित करने से पहले मैं इसे पहले काम करने की कोशिश करूंगा। इस बिंदु पर मुझे यकीन नहीं है कि बंद टर्मिनल के साथ पृष्ठभूमि में एक प्रक्रिया चलाना संभव है। –

उत्तर

13

एक सबहेल शुरू करना और nohup कमांड चलाने से वहां से बाहर निकलने पर टर्मिनल इसे मारने से बचने लगता है।

bash -c "nohup sh -c 'while true; do date; sleep 1; done' &" 

बहुत सुरुचिपूर्ण नहीं है, लेकिन मेरे लिए काम करता है।

6

यह पहले ही उत्तर दिया गया है, लेकिन स्क्रीन उपयोगिता ऐसा लगता है कि यह इसके लिए सही होगा।

  • man screen स्क्रीन के लिए प्रलेखन देखने के लिए।

  • www.ss64.com/osx/screen.html थोड़ा अधिक उपयोगकर्ता के अनुकूल दस्तावेज़ देखने के लिए। एक नाम और एक स्क्रिप्ट के साथ

  • प्रारंभ स्क्रीन को चलाने के लिए:

    screen -S GWatch Scripts/gw_watch.sh 
    This starts a screen session named 'GWatch' and executes gw_watch.sh. 
    

जब एक स्क्रीन सत्र शुरू होने पर भी इसे से डिस्कनेक्ट का विकल्प है। यह स्क्रीन पृष्ठभूमि में सक्रिय छोड़ देगा। उपयोगकर्ता लॉग आउट होने के बावजूद यह सक्रिय रहेगा (अनुमति के बावजूद)।

यहाँ एक उदाहरण है:

  1. 'screencheck.sh'
  2. नामक एक खोल स्क्रिप्ट बनाएं फ़ाइल में निम्न (मैं अक्सर TextWrangler और/या नैनो का उपयोग करें) रखो।

    #!/bin/bash 
    
    count=0 
    
    while [ $count -lt $1 ] ; do 
        echo "Count: $count of $1. Pausing for five seconds." 
        sleep 5s 
        ((count++)) 
    done 
    
  3. दो टर्मिनल विंडो खोलें।

  4. टर्मिनल विंडोज़ में से एक में screen -ls टाइप करें। आपको कोई सॉकेट नहीं मिलने के बारे में एक संदेश देखना चाहिए।
  5. दूसरी टर्मिनल विंडो में, निर्देशिका को बदलें जहां स्क्रिप्ट सहेजी गई थी।
  6. दूसरी टर्मिनल विंडो में screen -S ScreenCheck screencheck.sh 500 टाइप करें। screencheck.sh निष्पादन योग्य होना है।
  7. दूसरे टर्मिनल विंडो में, आप देखना चाहिए: ctrl-a d टाइप करके स्क्रीन सत्र से

    Count: 0 of 500. Pausing for five seconds. 
    Count: 1 of 500. Pausing for five seconds. 
    Count: 2 of 500. Pausing for five seconds. 
    ... 
    
  8. डिस्कनेक्ट। यह नियंत्रण + ए है, दोनों को छोड़ दो, डी कुंजी।
  9. आपको [detached] देखना चाहिए।
  10. पहले टर्मिनल में, screen -ls टाइप करें। screen -R ScreenCheck का उपयोग कर स्क्रीन सत्र के लिए

    FCH000: ~: screen -ls 
    There is a screen on: 
        1593.ScreenCheck (Detached) 
    1 Socket in /var/folders/pk/l6b5fhkj6mxfpfh8mtgmstg40000gn/T/.screen. 
    
  11. पुनः अनुलग्न:

  12. आप की तरह कुछ देखना चाहिए।

    Count: 226 of 500. Pausing for five seconds. 
    Count: 227 of 500. Pausing for five seconds. 
    Count: 228 of 500. Pausing for five seconds. 
    Count: 229 of 500. Pausing for five seconds. 
    ... 
    

अगर यह लॉगआउट के बाद चल रहा है देखने के लिए, किसी अन्य कंप्यूटर से लॉग आउट और कंप्यूटर के लिए ssh:

  • आप की तरह कुछ देखना चाहिए। screen -ls को पहले जैसा ही स्क्रीन सत्र दिखाना चाहिए।

    मुझे उम्मीद है कि इससे मदद मिलती है।

  • +0

    स्क्रीन बहुत पुरानी है। मैं भी इसका उपयोग करता हूं, लेकिन कई लोगों ने 'tmux' पर स्विच किया है। – tripleee