سؤال

لدي مجموعة من الخوادم التي أجري التجارب عليها screen.الإجراء هو ما يلي:

  1. ssh إلى الخادم XXX
  2. يطلق screen
  3. ابدأ التجارب في بضع علامات تبويب
  4. فصل screen
  5. قطع الاتصال بالخادم

أثناء إجراء التجارب، يمكنني بسهولة العثور على الخوادم الموجودة عليها sshإلى كافة الخوادم وإدراج العمليات الجارية (باستخدام top أو ps).

ومع ذلك، بمجرد الانتهاء من التجارب، كيف يمكنني العثور على الخوادم التي قمت بفتح جلسة الشاشة عليها (حتى أتمكن من إلقاء نظرة على المخرجات، وإعادة تشغيلها، وما إلى ذلك)؟

ملاحظة:تجاربي تقوم بطباعة مخرجاتها إلى الملفات أيضًا ...ولكن هذا ليس الهدف من سؤالي.

هل كانت مفيدة؟

المحلول

لإدراج جميع جلسات الشاشة للمستخدم، قم بتشغيل الأمر التالي مثل هذا المستخدم:

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 ..

هذا هو استخدام Unixy ببراعة إلى حد ما من مآخذ UNIX ملفوفة في أذونات نظام الملفات للتعامل مع الأمان والحالة والتدفقات.

نصائح أخرى

الامر شاشة الشاشة قد يكون ما تريد.

انظر رجل

في حين أن إجابة Joshperry صحيحة، أجد مزعجا للغاية أنه لا يخبرك باسم الشاشة (الذي قمت بتعيينه بخيار -t)، وهو في الواقع ما تستخدمه لتحديد جلسة. (ليس خطأه، بالطبع، هذا عيب الشاشة)

لهذا السبب، استخدم نصي بدلا من ذلك مثل هذا: ps auxw|grep -i screen|grep -v grep

لست متأكدا حقا من سؤالك، ولكن إذا كنت تريد كل ما تريده بالفعل هو جلسة شاشة مفتوحة حاليا، فحاول:

screen -ls
 For windows system

 Open putty 
 then login in server

إذا كنت ترغب في مشاهدة الشاشة في وحدة التحكم، فعليك كتابة الأمر

 Screen -ls

إذا كان عليك الوصول إلى الشاشة، فعليك استخدام الأمر أدناه

 screen -x screen id

يكتب PWD في سطر الأوامر للتحقق من المجلد الذي تقوم به حاليا

في معظم الحالات أ 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

سوف تتصرف تماما مثل الشاشة باستثناء عرض جميع جلسات الشاشة ، عند إعطاء الخيار -ls-all كمعلمة أولى.

وقد أشار الناس متعددة بالفعل ذلك

$ screen -ls

سوف تسرد جلسات الشاشة.

هنا خدعة أخرى قد تكون مفيدة لك.

إذا قمت بإضافة الأمر التالي كطريق آخر في .bashrc.ملف على الخادم XXX، ثم سيتم إعادة الاتصال تلقائيا إلى جلسة الشاشة عند تسجيل الدخول.

screen -d -r

اتمنى ان تجده مفيدا.

PS X |. شاشة GREP.

لمعرفة ما هي هذه الشاشة التي تعمل في حالة استخدام الأمر

الشاشة -A -M -D PHP Make_Something.php

لذلك أنت تستخدم الشاشة للحفاظ على التجارب التي تعمل في الخلفية، أم ماذا؟ إذا كان الأمر كذلك، لماذا لا تبدأ فقط في الخلفية؟

./experiment &

وإذا كنت تسأل كيفية الحصول على إشعار الوظيفة التي قمت بها، ماذا عن تتردد التجربة مع أمر بريد؟

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top