रनिंग स्क्रीन सेशन को कैसे सूचीबद्ध करें?


233

मेरे पास सर्वरों का एक समूह है, जिस पर मैं प्रयोग करके प्रयोग चलाता हूं screen। प्रक्रिया निम्नलिखित है:

  1. ssh सर्वर XXX के लिए
  2. प्रक्षेपण screen
  3. कुछ टैब में प्रयोग शुरू करें
  4. अलग करें screen
  5. सर्वर से डिस्कनेक्ट करें

हालांकि प्रयोग चल रहे हैं, मैं आसानी से यह पता लगा सकता हूं कि वे कौन से सर्वर पर हैं जो sshसभी सर्वरों से हैं और मेरी चल रही प्रक्रियाओं (उपयोग topया ps) को सूचीबद्ध कर रहे हैं ।

हालाँकि, एक बार प्रयोग समाप्त हो जाने के बाद, मैं कैसे पता लगा सकता हूं कि मेरे पास कौन से सर्वर हैं जिनका स्क्रीन सेशन खोला गया है (ताकि मैं आउटपुट पर एक नजर डाल सकूं, उन्हें पुनः लॉन्च कर सकूं)।

पुनश्च: मेरे प्रयोग फाइलों को उनके आउटपुट को प्रिंट करते हैं, भी ... लेकिन यह मेरे प्रश्न का बिंदु नहीं है।

जवाबों:


420

किसी उपयोगकर्ता के लिए सभी स्क्रीन सत्रों को सूचीबद्ध करने के लिए, निम्न कमांड को उस उपयोगकर्ता के रूप में चलाएं:

screen -ls

एक विशिष्ट मशीन पर सभी स्क्रीन सत्र देखने के लिए आप यह कर सकते हैं:

ls -laR /var/run/screen/

मुझे यह मेरी मशीन पर मिलता है:

gentle ~ # ls -laR /var/run/screen/

/var/run/screen/:
total 1
drwxrwxr-x  4 root utmp   96 Mar  1  2005 .
drwxr-xr-x 10 root root  840 Feb  1 03:10 ..
drwx------  2 josh users  88 Jan 13 11:33 S-josh
drwx------  2 root root   48 Feb 11 10:50 S-root

/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp  96 Mar  1  2005 ..
prwx------ 1 josh users  0 Feb 11 10:41 12931.pts-0.gentle

/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar  1  2005 ..

यह सुरक्षा, स्थिति और धाराओं को संभालने के लिए फाइलसिस्टम अनुमतियों में लिपटे यूनिक्स सॉकेट्स का एक शानदार ढंग से यूनिक्स उपयोग है।


1
मुझे आश्चर्य है कि यह उत्तर, जिसने पूरी तरह से सवाल का जवाब दिया, को एक
नीचता

वैकल्पिक रूप से यदि आप नामकरण सम्मेलन के आधार पर एक विशिष्ट स्क्रीन प्राप्त करना चाहते हैं तो आप परिणाम प्राप्त कर सकते हैं। ls -R /var/run/screen/S-root/ | grep "NamingConvention"। स्क्रीन <pid>.<screen_name>प्रारूप में सहेजें । यह बैश स्क्रिप्ट के लिए उपयोगी है। इसलिए यदि आपके पास नाम के साथ एक स्क्रीन है, तो 0000.NamingConventionयह शाब्दिक रूप से उन स्क्रीन का नाम लौटाएगा जिन्हें आप एक आसान से पार्स प्रारूप में देख रहे हैं।
एलियास रानज


13

हालांकि, जॉस्पररी का जवाब सही है, मुझे बहुत गुस्सा आता है कि यह आपको स्क्रीन का नाम नहीं बताता है (जिसे आप -t विकल्प के साथ सेट करते हैं), यह वास्तव में एक सत्र की पहचान करने के लिए आप क्या उपयोग करते हैं। (उसकी गलती नहीं है, निश्चित रूप से, यह एक स्क्रीन दोष है)

इसलिए मैं इसके बजाय एक स्क्रिप्ट का उपयोग करता हूं: ps auxw|grep -i screen|grep -v grep


2
-S विकल्प पर एक नज़र डालें। प्रदान किया गया मूल्य यूनिक्स सॉकेट फ़ाइल नाम में संग्रहीत है और lsआउटपुट में दिखाई देता है। अगर आपको जरूरत है, तो आप -t विकल्प भी रख सकते हैं।
जॉस्पररी

-S विकल्प बढ़िया है, क्योंकि यह आपको उस सत्र के नाम से फिर से शुरू करने की सुविधा देता है:screen -rd <sessionname>
jorisw

7

मैं वास्तव में आपके प्रश्न के बारे में निश्चित नहीं हूं, लेकिन यदि आप वास्तव में चाहते हैं कि सूची वर्तमान में खोले गए स्क्रीन सत्र में है, तो कोशिश करें:

screen -ls

6
 For windows system

 Open putty 
 then login in server

अगर आप Console में स्क्रीन देखना चाहते हैं तो आपको कमांड लिखना होगा

 Screen -ls

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

 screen -x screen id

PWDवर्तमान में आप किस फ़ोल्डर में हैं, यह जांचने के लिए कमांड लाइन में लिखें


3

ज्यादातर मामलों में screen -RRx $username/ पर्याप्त होगा :)

यदि आप अभी भी सभी स्क्रीन को सूचीबद्ध करना चाहते हैं तो निम्न स्क्रिप्ट को अपने पथ में रखें और इसे स्क्रीन या जिसे आप पसंद करते हैं उसे कॉल करें:

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "$@"
else
    shopt -s nullglob
    screens=(/var/run/screen/S-*/*)
    if (( ${#screens[@]} == 0 )); then
        echo "no screen session found in /var/run/screen"
    else
        echo "${screens[@]#*S-}"
    fi
fi

यह सभी स्क्रीन सत्रों को दिखाने के अलावा स्क्रीन की तरह ही व्यवहार करेगा, जब विकल्प-सभी को पहले पैरामीटर के रूप में देते हैं।


3

कई लोगों ने पहले ही बताया है

$ screen -ls

स्क्रीन सत्रों को सूचीबद्ध करेगा।

यहां एक और चाल है जो आपके लिए उपयोगी हो सकती है।

यदि आप सर्वर xxx पर अपनी .bashrc फ़ाइल में अंतिम पंक्ति के रूप में निम्न कमांड जोड़ते हैं , तो यह स्वचालित रूप से लॉगिन के साथ आपके स्क्रीन सत्र को फिर से कनेक्ट कर देगा।

screen -d -r

उम्मीद है यह आपको उपयोगी होगा।


1
मैं यह नोट करना चाहता हूं कि आपको उसी उपयोगकर्ता के रूप में लॉग इन करना होगा जिसने स्क्रीन शुरू की थी, मुझे चिंता थी कि मेरा स्क्रीन सत्र चला गया था, लेकिन उपयोगकर्ता "मीडिया" के तहत मेरी फाइल कॉपी जारी थी। यह तार्किक लग सकता है, लेकिन अगर आप इसकी देखरेख करते हैं तो यह कुछ घबराहट को बचा सकता है।
पॉल

0

पीएस एक्स | ग्रीप स्क्रीन

यह देखने के लिए कि उस स्क्रीन पर क्या चल रहा है जब आपने कमांड का उपयोग किया था

स्क्रीन -m -d php make_something.php


-4

तो आप स्क्रीन का उपयोग पृष्ठभूमि में चल रहे प्रयोगों, या क्या करने के लिए कर रहे हैं? यदि हां, तो क्यों न इसे पृष्ठभूमि में शुरू करें?

./experiment &

और अगर आप पूछ रहे हैं कि मुझे नोटिफिकेशन कैसे मिलता है तो मैं कैसे काम करता हूं, मेल कमांड के साथ एक साथ प्रयोग कैसे करें?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"

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

मैं एक अनुभवी sysadmin नहीं हूँ, लेकिन मुझे लगता है कि स्क्रीन का उपयोग सर्वर प्रक्रियाओं को चलाने के लिए अच्छी तरह से काम करता है: अगर कुछ गलत हो जाता है, तो आप बस उस विंडो पर फ़्लिक कर सकते हैं, और सभी आउटपुट को देख सकते हैं जिससे समस्या पैदा हुई - आपको ज़रूरत नहीं है लॉग फ़ाइलें खोलना शुरू करें। इसका मतलब यह भी है कि आप आसानी से ctrl + c के साथ एक प्रक्रिया को मार सकते हैं। यदि आप अक्सर एक ही सेवा शुरू कर रहे हैं और बंद कर रहे हैं तो यह सब आसान है।
स्टीव बेनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.