كيفية سرد جلسات الشاشة قيد التشغيل؟
-
22-08-2019 - |
سؤال
لدي مجموعة من الخوادم التي أجري التجارب عليها screen
.الإجراء هو ما يلي:
ssh
إلى الخادم XXX- يطلق
screen
- ابدأ التجارب في بضع علامات تبويب
- فصل
screen
- قطع الاتصال بالخادم
أثناء إجراء التجارب، يمكنني بسهولة العثور على الخوادم الموجودة عليها 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"