সংযুক্ত না করে স্ক্রিন এবং রান কমান্ড তৈরি করুন


28

আমি কোনও রক্ষণাবেক্ষণের রুটিন স্বয়ংক্রিয়ভাবে কাজ করতে যাচ্ছি যা একটি স্ক্রিন সেশনে চলমান কোনও স্ক্রিপ্ট শুরু করা এবং থামানো জড়িত। আমার দৃষ্টিভঙ্গি হ'ল স্ক্রিন সেশনটি মেরে ফেলা এবং তারপরে এটি পুনরায় চালু করুন এবং স্ক্রিপ্টের মধ্যে থেকে স্ক্রিন তৈরি করতে এবং স্ক্রিনের সাথে সংযুক্ত হওয়ার প্রয়োজন ছাড়াই একটি কমান্ড পাস করার জন্য কমান্ডটি চালানো।

তবে এ নিয়ে আমার সমস্যা হচ্ছে। আমি স্ক্রিনটি ব্যবহার করে সংযুক্ত না করে সঠিকভাবে তৈরি করতে পারি screen -d -m -S screen_name। তবে, যদি আমি এর উপর ভিত্তি করে কোনও কমান্ড চালিত করি:

screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''

প্রতিধ্বনির সাথে '\ 015' একক উদ্ধৃতির চেয়ে ব্যাকটিক্স দিয়ে মোড়ানো। এটি ব্যবহার করা কমান্ডগুলি ডিরেক্টরিতে স্থানান্তরিত করে সেখানে অবস্থিত স্ক্রিপ্ট চালাচ্ছে বলে এন্টার কী টিপে ব্যবহারকারীর অনুকরণ করা। এই কমান্ডটি কাজ করে, তবে কেবল একবার স্ক্রিনটি তৈরি হয়ে গেলে এটি সংযুক্ত করা হয়েছে। যেহেতু আমি স্ক্রিনটি তৈরি করার এবং এটির মধ্যে কমান্ডগুলি চালনার প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করছি আমি কোনও স্ক্রিপ্টের সাথে সংযুক্তি এবং বিচ্ছিন্ন হওয়া এড়াতে চাই। স্ক্রিনের মধ্যে আমার যে কমান্ডগুলি সম্পাদন করতে হবে এবং আমার ফলাফল অনুসারে সম্পাদনা করতে হবে সেগুলি সহ আমি একটি শেল স্ক্রিপ্ট তৈরির পরামর্শটি চেষ্টা করব।

পর্দার মধ্যে একটি কমান্ড চালিয়ে একটি পর্দা তৈরি করার এবং কোনও কমান্ড চালানোর কোনও উপায় আছে কি না, তৈরি করার পরে পর্দার সাথে সংযুক্ত না করে কমান্ড কার্যকর করার আগে?

আগাম ধন্যবাদ.

** আপডেট - শেল স্ক্রিপ্টের মধ্যে আমার যে কমান্ডগুলি কার্যকর করতে হবে তা রাখার পরামর্শ দেওয়ার পরে আমি সফলভাবে একটি স্ক্রিন তৈরি করতে সক্ষম হয়েছি এবং পর্দার মধ্যে থেকে কমান্ডগুলি কার্যকর করতে সক্ষম হয়েছি, তবে স্ক্রিপ্টটি বন্ধ হয়ে গেলে আমি এমন আচরণ পাচ্ছি am পর্দা পাশাপাশি বন্ধ। এটি কোনও সমস্যা হতে পারে না কারণ স্ক্রিপ্টটি লগিং স্ক্রিপ্ট যা কেবলমাত্র সিস্টম অ্যাডমিনের জ্ঞান বা স্ক্রিপ্টের মাধ্যমে আমি বিকাশের চেষ্টা করে থামি, তবে স্ক্রিনটি এমনভাবে সেটআপ করা ভাল rable স্ক্রিপ্ট বন্ধ হয়ে গেলে অদৃশ্য হয় না। এই আচরণ অর্জন করা সম্ভব? **


1
আমারও একই সমস্যা গাড়ীতে আঘাত এবং যারা এই সমস্যার উপর হোঁচট খায় অন্য কেউ জন্য superuser.com একটি সমাধান পাওয়া superuser.com/questions/342463/...
ড্যান হার্বার্ট

স্ক্রিনটি উন্মুক্ত রাখতে আপনি এমন কিছু ব্যবহার করতে পারেন: স্ক্রিন বাশ-সি 'প্রতিধ্বনি "পরীক্ষা"; / বিন / বাশ '
gwyn

1
আপনার অটো-সমাপ্তির ইস্যুটির জন্য, আপনি একটি বিশেষ ব্যবহার করতে পারেন .screenrcযার মধ্যে লাইন রয়েছে zombie kr, যা একটি সমাপ্ত উইন্ডোটি উন্মুক্ত রাখবে এবং আপনি kউইনডাব বন্ধ করতে বা rউইন্ডোতে আবার কমান্ড চালাতে চাপতে পারেন । আমার ডিফল্ট .স্ক্রিনসিআরসি-র জন্য এটি আমার কাছে আছে।
মার্টিন সি

উত্তর:


17

আমি মনে করি আপনি হয়ত বেশ কয়েকটি সমস্যা নিয়ে চলেছেন।

আপনার পুনরায় সংযুক্ত করার আগে যদি কমান্ডটি শেষ হয়, স্ক্রীনটি চলে যাবে। আপনি এটি ব্যবহার করে ডেমো করতে পারেন:

screen -d -m ls -l

এটি ls -lকমান্ডটি চালাবে , তবে screen -listস্ক্রিন প্রক্রিয়া শেষ হওয়ার সাথে সাথে এটি প্রদর্শিত হবে না।

আপনি এই 015 ডলার স্টাফ দিয়ে কী করতে চাইছেন তা আমার কোনও ধারণা নেই। সম্ভবত আপনার প্রশ্ন আপডেট করা আপনাকে সাহায্য করবে, কারণ আমি যা মনে করি আপনি যা করতে চেষ্টা করছেন তা পর্দার সেশনে একাধিক কমান্ড চালানো। এটি যেমন সহজ হতে হবে:

screen -d -m bash -c "command1 ; command2 ; command3"

এগুলি যদি খুব বেশি ব্যবহৃত হয়, সম্ভবত আপনার একটি শেল স্ক্রিপ্ট তৈরি করা উচিত যা কেবল এই কমান্ডগুলি চালায়, তবে আরও সাধারণ ব্যবহার করুন:

screen -d -m /path/to/script.sh

তত্ক্ষণাত স্ক্রিনটি বিচ্ছিন্ন না করে কি একইরকম আচরণ করার উপায় আছে? বলুন আমি একটি ssh অধিবেশন শুরু করতে চাই এবং তারপরে ঠিক আলাদা করতে চাই; screen -d -m sshসেশনটি তৈরি হওয়ার আগে পাসওয়ার্ড প্রম্পটে আলাদা করা হবে।
উজ্জ্বল-তারা

এটি আমার পক্ষে কাজ করে না। বেশ কয়েকটি দীর্ঘ-চলমান প্রোগ্রামগুলির সাথে hte "কমান্ডএন" প্রতিস্থাপনের ফলাফল কিছুই দেখায় না screen -list। এছাড়াও, ওপি করার চেষ্টা করছে বলে এটি স্ক্রিনটির নাম দেয় না।
সেরিন

আমি এই পদ্ধতিটি ব্যবহার করে একটি অজগর প্রোগ্রাম চালানোর দিকে তাকিয়ে ছিলাম। এটি চালানোর জন্য আমি একটি শ স্ক্রিপ্ট তৈরি করার চেষ্টা করেছি, তবে তালিকায় পর্দাটি দেখিনি। পরিবর্তে আমি ব্যবহার করেছি screen -d -m python EventGenerator.py, যা দুর্দান্ত কাজ করেছে
ড্যান সিবারোস্কি - এমএসএফটি

1
সম্ভবত এর bash -c "commands"পরিবর্তে হওয়া উচিতbash "commands"
marcovtwout

আপনি ঠিক বলেছেন, সেখানে -c থাকতে হবে।
এক্সডিজি

8

একটি বিচ্ছিন্ন স্ক্রিন শুরু করুন

screen -dmS <screen name>

পূর্বে নির্মিত বিচ্ছিন্ন স্ক্রিনে কমান্ড কার্যকর করুন

screen -S <screen name> -X stuff '<CMD>\n'

হ্যাঁ, কমান্ডটি জমা দেওয়ার জন্য আপনাকে প্রবেশ চিহ্নটি টাইপ করতে হবে অন্যথায় এটি কেবল পর্দায় স্ট্রিং যুক্ত করবে।

http://osdir.com/ml/gnu.screen/2003-09/msg00029.html


1
'স্টাফ' কী?
নাদভ বি

stuffআসলে একটি কমান্ড যা স্ক্রিন সেশনে অন্য কমান্ডটিকে অনুলিপি করে দেয়: স্টাফ [স্ট্রিং] বর্তমান উইন্ডোর ইনপুট বাফারে স্ট্রিং স্ট্রিং স্টাফ করুন। এটি "পেস্ট" কমান্ডের মতো তবে অনেক কম ওভারহেডের সাথে। কোনও পরামিতি ছাড়াই, স্ক্রিন স্ট্রিং স্টাফের জন্য অনুরোধ জানাবে। আপনি "স্টাফ" কমান্ড দিয়ে বড় বাফারগুলি পেস্ট করতে পারবেন না। কী বাঁধাইয়ের জন্য এটি সবচেয়ে দরকারী। "বাইন্ডকি "ও দেখুন। [ theterminallife.com/selling-commands-into-a-screen-session/
আলিসা

2

আমি এর আগেও এই সমস্যার মুখোমুখি হয়েছি, এটি ছিল সাইগউইন প্রয়োগের সাথে একটি বাগ।

আমি যা করেছি তা হ'ল একটি ".স্ক্রিনসিআরসিডিচেচিং" তৈরি করা হয়েছিল যা কেবলমাত্র নিম্নলিখিত কমান্ডের সাথে রয়েছে

#detach
detach 

এবং তারপরে স্ক্রিনটি শুরু করুন

screen -c ~/loginScripts/tempScreenrc/.screenrc_detaching

তারপরে আপনার স্ক্রিন সেশনটি রয়েছে এবং এটি ইতিমধ্যে সংযুক্ত এবং বিচ্ছিন্ন হয়ে গেছে এবং আপনি এতে কমান্ড পাম্প করা ভাল।

সহজ! : P: P


2

এটি আমার জন্য কাজ করেছিল, কাজ করে -cনা

screen -d -m bash -c "command1; command2; command3"


1

পূর্ববর্তী উত্তরগুলি পরীক্ষা করার জন্য একটি অনুলিপি উপায় হ'ল:

 # No sessions:
screen -ls

 # Returns immediately:
time screen -dmS screen_descritive_session_name  bash -c 'sleep 20; hostname >> /tmp/h'

 # New session present:
screen -ls

 # File with return of command was created :)
sleep 20; cat /tmp/h

প্রত্যাশার ফলাফলটি একই রকম হওয়া উচিত:

No Sockets found in /var/run/screen/S-yourusernamehere.

(এর অর্থ এর আগে কোনও স্ক্রিন-সেশন তৈরি করা হয়নি)

real    0m0.002s
user    0m0.000s
sys     0m0.000s

(এটি স্ক্রিন তৈরি করতে এবং এটি থেকে আলাদা করতে সময় ব্যয় করেছে most প্রায় তাত্ক্ষণিক))

There is a screen on:
    20318.screen_descritive_session_name    (20/08/2018 16:29:35)   (Detached)
1 Socket in /var/run/screen/S-yourusernamehere.

(এই আউটপুটটি স্ক্রিন সেশনগুলি উপলভ্য দেখায় last শেষ আদেশে তৈরি করা হয়েছে))

sleep 20; cat /tmp/h

(এটি catgnu- স্ক্রিনের ভিতরে চালিত হোস্টনামটি দেখায়)


এবং এই ধরনের পরীক্ষার ফলাফল কী?
পিয়ের.ভ্রিয়েন্স

আপনি ঠিক বলেছেন, এর কোনও উদাহরণ নেই। আমি যোগ করব.
এনরিক এস ফিলিএজ

অনেক ভাল! Merci! +1
পিয়ের.ভ্রিয়েনস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.