2011-06-30 4 views
22

मैं जीएनयू स्क्रीन को इसके अंदर चल रहे प्रोग्राम से शुरू करने के लिए कैसे स्क्रिप्ट कर सकता हूं ताकि प्रोग्राम पूरा होने पर सत्र से बाहर नहीं निकल सके?मैं जीएनयू स्क्रीन को इसके अंदर चल रहे प्रोग्राम से शुरू करने के लिए कैसे स्क्रिप्ट कर सकता हूं ताकि यह प्रोग्राम पूरा होने पर सत्र से बाहर नहीं निकल सके?

मैं एक मैन्युअल रूप से स्क्रीन शुरू करना चाहता हूं, यदि मैं मैन्युअल रूप से स्क्रीन शुरू करता हूं और फिर इस प्रोग्राम को इसके अंदर लॉन्च करता हूं तो सब कुछ ठीक वैसे ही काम करता है जैसा मैं चाहता हूं। यदि कार्यक्रम स्क्रीन सत्र से बाहर निकलता है या दुर्घटनाग्रस्त हो जाता है और मैं यह देखने के लिए देख सकता हूं कि अभी क्या हुआ है। हालांकि अगर मैं एक साधारण स्क्रीन लॉन्च के साथ प्रोग्राम शुरू करता हूं तो यह स्क्रीन के अंदर चलाता है लेकिन जब प्रोग्राम स्क्रीन सत्र समाप्त होता है और प्रोग्राम से कोई भी आउटपुट खो जाता है।

तो screen –dmS serverName serverApplication मेरे परिदृश्य के लिए काम नहीं करता है। मैंने एक स्क्रिप्ट बनाने के बारे में सोचा था जो प्रोग्राम को लॉन्च करता है जिसे मैं & चलाने के लिए चाहता हूं, फिर हमेशा सोता है, फिर मैं स्क्रीन के साथ एक ही समय में स्क्रिप्ट लॉन्च कर सकता हूं और मुझे बाद में प्रभाव मिलना चाहिए, लेकिन यह चीजों को करने का एक बेवकूफ तरीका लगता है और मुझे यकीन है कि कुछ और सुरुचिपूर्ण होना चाहिए।

मैंने कुछ पेज ट्यूटोरियल पढ़े हैं और मैन पेज के माध्यम से उलझा हुआ है लेकिन ऐसा करने का सही तरीका मेरे रूप में कुछ भी नहीं है। मैंने कोशिश की -X लेकिन यह स्क्रीन कमांड के लिए है, स्क्रीन सत्र के अंदर कमांड चलाने के लिए नहीं ... किसी भी सुझाव की बहुत सराहना की जाएगी; यदि स्क्रिप्टिंग में उपयोग के लिए एक बेहतर उपकरण है तो मुझे जीएनयू स्क्रीन के अलावा कुछ और उपयोग करने में भी खुशी है, लेकिन कृपया मुझे एक उदाहरण दें जहां संभव हो।

(साइड नोट: दो बातें मैं इस के साथ चल रहे हो जाएगा एक minecraft_server और एक mythtv_backend हैं मेरे योजना कुछ गहरे लाल रंग का/bash स्क्रिप्ट के माध्यम से बूट पर एक chron नौकरी से इन लांच करने के लिए किया गया था।)

उत्तर

26

सबसे पहले, आप तब

$ screen -dmS "serverName" 

, अपने आदेश है कि खोल करने के लिए का उपयोग कर -X के साथ संयोजन में स्क्रीन के stuff भेजें:: 'एक डेमॉन स्क्रीन सत्र प्रारंभ करने में सिर्फ अपने डिफ़ॉल्ट खोल चल चाहते हैं जाएगा

$ screen -S "serverName" -p 0 -X stuff "serverApplication$(printf \\r)" 

-p स्क्रीन को बताने के लिए महत्वपूर्ण है कि उस सत्र के भीतर कौन सी विंडो कमांड को भरने के लिए। इस मामले में, यह एकमात्र उपलब्ध विंडो है, 0, लेकिन यदि आप इसे निर्दिष्ट नहीं करते हैं, तो कुछ अजीब कारणों से आपका आदेश कहीं भी नहीं जाएगा। $(printf \\r) एक 'रिटर्न' कीस्ट्रोक भेजता है। एक नियमित \n अपनी जगह पर काम कर सकता है, लेकिन I've read जो कि शैल-निर्भर है। न्यूलाइन कैरेक्टर बैश में काम नहीं करता है; मैं उसकी जिम्मेदारी ले सकता हूं।

यहां एक और अच्छी चाल है। आप फिर उस सत्र के भीतर एक और स्क्रीन विंडो बनाना चाहते हैं, तो आप कर सकते हैं:

$ screen -S "serverName" -X screen 

अब आप आदेशों के रूप में ऊपर ही सिंटैक्स का उपयोग है कि एक को भेज सकते हैं, लेकिन -p 1 साथ। बहुत सारा मजा।

+0

यदि -p पैरामीटर काम करता है तो यह बहुत अच्छा होगा! मैं बाद में कोशिश करूँगा। मुझे स्क्रीन विकास साइट https://savannah.gnu.org/bugs/index.php?10074 पर कुछ विवरण मिले जो दिखाते हैं कि यह स्क्रीन में एक लंबी स्थायी बग है, यह नई रिलीज में तय है लेकिन यह नहीं है अभी तक तैयार :-( – TafT

+3

मैंने इसे एक साधारण मामले में अभी कोशिश की है और सामान स्क्रीन कमांड की आवश्यकता नहीं प्रतीत होती है। exec '-p 0' पैरामीटर के साथ ठीक काम करेगा और इसका मतलब है कि मुझे $ (printf \\ r) निष्पादित करने के लिए एक स्क्रिप्ट प्राप्त करने के लिए। '$ स्क्रीन-डीएमएस" सर्वर नाम " $ स्क्रीन-एस" सर्वर नाम "-पी 0 -X निष्पादन सेवर अनुप्रयोग ' – TafT

+1

बढ़िया!एक और तरीका सुनना अच्छा है। निष्पादन $ (printf \\ r) से याद रखना निश्चित रूप से आसान है! :) – Eric

संबंधित मुद्दे

 संबंधित मुद्दे