जीएनयू स्क्रीन के साथ एक कार्यक्रम चलाएं और तुरंत बाद अलग करें


27

मैं यह जानने की कोशिश कर रहा हूं कि जीएनयू स्क्रीन सत्रों में सिस्टम बूट पर प्रोग्राम (ओं) को शुरू करने वाली स्क्रिप्ट कैसे लिखनी है। मैं यह कोशिश कर रहा हूँ:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

लेकिन कमांड कैंट को निष्पादित नहीं किया जा सकता क्योंकि सत्र पहले से ही अलग है? केवल एक चीज जो मुझे चाहिए वह है स्क्रीन सेशन में कमांड चलाना और तुरंत इस सत्र को अलग करना।

उत्तर के लिए धन्यवाद, लेकिन अब मुझे एक और समस्या का सामना करना पड़ा। मेरे "प्रोग्राम और प्रोग्राम 2" के लिए कुछ चर डालने के बाद स्क्रिप्ट काम करना बंद कर देती है। कुछ इस तरह:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

किसी कारण से "-f config.cfg" को अनदेखा कर दिया गया। मुझे कमांड को कोट करने की भी कोशिश की जाती है और मेरी मदद भी नहीं की जाती है।


-Xविकल्प क्यों ?
enzotib

जवाबों:


34

क्या आप वास्तव \में लाइन के अंत में डालने का मतलब है ? यदि नहीं तो उन को हटाने का प्रयास करें - वे निम्नलिखित चरित्र से बच जाते हैं।

-Xउदाहरण के लिए, मेरे लिए सेटअप कार्य को छोड़ने में मदद करता है:

screen -S test -d -m -X touch /tmp/test

No screen session foundहालांकि, के साथ विफल रहता है :

screen -S test -d -m touch /tmp/test

ठीक काम करता है। जैसा कि मुझे संदेह है कि निम्नलिखित आपके लिए काम करेंगे:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

याद रखें, कि यदि आप इसे बूट समय पर चलाते हैं, तो $ HOME एक विशिष्ट उपयोगकर्ता के रूप में लॉग इन करने के बाद वैसा नहीं है। यदि आपको इसे एक निश्चित उपयोगकर्ता के रूप में चलाने की आवश्यकता है, तो आपको suइसे उस उपयोगकर्ता के रूप में चलाने के लिए पसंद का उपयोग करने की आवश्यकता होगी , और पूर्ण पथ निर्दिष्ट करने से कोई अस्पष्टता दूर होगी:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

या, आप पूरी स्क्रिप्ट को ऊपर कहेंगे su - username /path/to/your/script


उत्तर के लिए धन्यवाद, लेकिन अब मुझे एक और समस्या का सामना करना पड़ा। स्क्रिप्ट मेरे "प्रोग्राम और प्रोग्राम 2" के लिए कुछ चर डालने के बाद काम करना बंद कर देती है
TbMa

यह: screen -S test -d -m $HOME/folder/folder/.programलगभग वही करता है जो मैं देख रहा हूँ सिवाय अगर फ़ोल्डर / .program समाप्त हो गया है, स्क्रीन सत्र स्वचालित रूप से बंद है। क्या कार्यक्रम पूरा होने के बाद भी स्क्रीन सेशन (शेल) को चालू रखने का कोई तरीका है? शायद कार्यक्रम को विशेष रूप से चलाने के बजाय, एक शेल शुरू करें जो प्रोग्राम शुरू करता है और फिर शेल प्रॉम्प्ट, या कुछ और पर लौटता है?
रॉकेटनेट्स

4

क्राय हॉक की तरह उल्लिखित, आप प्रोग्राम को कमांड-लाइन पर रख सकते हैं।

यदि आपको वास्तव में -X विकल्प का उपयोग करना चाहिए, तो a) आपको 'स्क्रीन' कमांड को निर्दिष्ट करने की आवश्यकता है और b) सत्र को पहले से मौजूद रहने की आवश्यकता है।

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

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

यह जवाब stackoverflow.com के उत्तर के समान है जो एक समान प्रश्न का उत्तर देता है । मैं इस उत्तर को @CryHavok से अधिक पसंद करता हूं क्योंकि यह उत्तर आपके उपयोगकर्ता के डिफ़ॉल्ट शेल के अंदर आपके प्रोग्राम को निष्पादित करता है (@CryHavok आपके प्रोग्राम को बिना पैरेंट शेल के चलाता है इसलिए जब प्रोग्राम मर जाता है या आप ctrl-c कर लेते हैं तो स्क्रीन सत्र तुरंत समाप्त हो जाता है)
ट्रेवर बॉयड स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.