চলমান স্ক্রিন সেশন তালিকা কিভাবে?


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

এটি ইউনিক্স সকেটগুলির একটি বরং উজ্জ্বলতার সাথে ইউনিক্স ব্যবহার যা সুরক্ষা, রাষ্ট্র এবং স্ট্রিমগুলি পরিচালনা করতে ফাইল সিস্টেমের অনুমতিগুলিতে আবৃত pped


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 বিকল্পটিও রাখতে পারেন।
joshperry

-S বিকল্পটি দুর্দান্ত, কারণ এটি আপনাকে সেই অধিবেশনটির নাম দিয়ে আবারও শুরু করতে দেয়:screen -rd <sessionname>

7

আমি আপনার প্রশ্নের বিষয়ে সত্যই নিশ্চিত নই তবে আপনি যদি সত্যিই চান তবে বর্তমানে খোলার স্ক্রিন সেশনটির তালিকা থাকলে চেষ্টা করুন:

screen -ls

6
 For windows system

 Open putty 
 then login in server

আপনি যদি কনসোলে স্ক্রিন দেখতে চান তবে আপনাকে কমান্ড লিখতে হবে

 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

এটি সমস্ত পর্দা সেশন দেখানো বাদ দিয়ে ঠিক পর্দার মতো আচরণ করবে, যখন প্রথম প্যারামিটার হিসাবে -ls-all বিকল্পটি দেওয়ার সময়।


3

একাধিক লোক ইতিমধ্যে এটি নির্দেশ করেছেন

$ screen -ls

স্ক্রিন সেশন তালিকা।

এখানে অন্য কৌশল যা আপনার পক্ষে কার্যকর হতে পারে।

আপনি যদি সার্ভার xxx এ আপনার .bashrc ফাইলটিতে একটি লাইন হিসাবে নিম্নলিখিত কমান্ডটি যুক্ত করেন , তবে এটি লগইনে আপনার স্ক্রিন সেশনে স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ স্থাপন করবে।

screen -d -r

আশা করি আপনি এটি দরকারী পাবেন।


1
আমি লক্ষ করতে চাই যে আপনাকে একই ব্যবহারকারীর মতো লগইন করতে হবে যিনি পর্দা শুরু করেছিলেন, আমি উদ্বিগ্ন ছিলাম আমার স্ক্রিন সেশনটি চলে গেছে, তবে আমার ফাইল অনুলিপি "মিডিয়া" ব্যবহারকারীর অধীনে অব্যাহত ছিল। এটি যৌক্তিক মনে হতে পারে তবে আপনি যদি এটি পর্যবেক্ষণ করেন তবে এটি কিছুটা আতঙ্ককে বাঁচাতে পারে।
পল

0

পিএস এক্স | গ্রেপ স্ক্রিন

আপনি কমান্ডটি ব্যবহার করলে সেই স্ক্রিনটি কী চলছে তা দেখতে

স্ক্রিন -A -m -d পিএইচপি মেক_সোমথিং.পিপি


-4

সুতরাং আপনি পটভূমিতে পরীক্ষাগুলি চালিয়ে যেতে পর্দা ব্যবহার করছেন, বা কী? যদি তা হয়, তবে এটি কেবল পটভূমিতে শুরু করবেন না কেন?

./experiment &

এবং যদি আপনি জিজ্ঞাসা করছেন যে আমি কীভাবে বিজ্ঞপ্তি পেতে পারি তবে কীভাবে মেল কমান্ড দিয়ে পরীক্ষার স্ট্রিং করা যায়?

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

আমি স্ক্রিনটি ব্যবহার করছি যাতে আমি আমার পরীক্ষাগুলি বন্ধ না করে সার্ভারগুলি থেকে সংযোগ বিচ্ছিন্ন করতে পারি। প্রশ্নটি কীভাবে বিজ্ঞপ্তিগুলি পাবেন (যদিও মেলটি এটি করার একটি দুর্দান্ত উপায় হতে পারে) নয়, তবে কোনও প্রদত্ত মেশিনটি খোলার স্ক্রিন সেশন ছিল কিনা তা কীভাবে সন্ধান করবেন। আপনার উত্তরের জন্য যাইহোক ধন্যবাদ!
Wookai

আমি একজন অভিজ্ঞ সিসাদমিন নই, তবে সার্ভার প্রসেসগুলি চালানোর জন্য স্ক্রিনটি ব্যবহার করে ভালভাবে কাজ করতে দেখাচ্ছি: যদি কিছু ভুল হয়ে যায় তবে আপনি কেবল সেই উইন্ডোটিতে ঝাঁকুনি দিয়ে দেখতে পারেন এবং সমস্যার ফলে যাওয়ার সমস্ত আউটপুট দেখতে পারেন - আপনার দরকার নেই লগ ফাইল খুলতে শুরু করুন। এর অর্থ হ'ল আপনি সহজেই সিআরটিএল + সি দিয়ে কোনও প্রক্রিয়াটি মেরে ফেলতে পারেন। আপনি প্রায় একই পরিষেবাটি চালু এবং বন্ধ করে দিলে এটি সবই কার্যকর।
স্টিভ বেনিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.