স্ক্রিনে একটি কমান্ড কার্যকর করতে এবং আলাদা করতে কীভাবে?


75

কমান্ড কার্যকর করতে এবং তারপরে বিচ্ছিন্ন করার জন্য আমি কীভাবে স্ক্রিন পেতে পারি (এটি, স্ক্রিপ্ট শুরু করার বাইরে কোনও ইনপুট ছাড়াই স্বয়ংক্রিয়ভাবে একটি স্ক্রিপ্টে)? উদাহরণস্বরূপ আমি myscript.sh চালান এবং এটি স্বয়ংক্রিয়ভাবে একটি স্ক্রিন সেশন শুরু করে, একটি আদেশ কার্যকর করে, তারপরে পৃথক করে।

উত্তর:


114

এটা একটা সহজ জিনিষ:

screen -d -m yourcommand

4
কোন পাশা. স্ক্রিন-ডি-এম কমান্ড, স্ক্রিন-তালিকাটি বলছে কোনও সকেট নেই, স্ক্রিন-কোনও সেশন নেই
অন্ধকার রেখা

1
কোনওভাবে আপনার কমান্ডটি পাওয়া যায় নি, বা স্বয়ংক্রিয়ভাবে তৈরি স্ক্রিন পরিবেশে সঠিকভাবে কাজ করছে না। শুধু করার চেষ্টা করুন screen yourcommandছাড়া -dএবং -mএবং দেখুন কিভাবে যে প্রথম যায়।
অ্যালান কারি

আপনি সঠিকভাবে সাজান। কমান্ডটি শেষ হয়ে গেলে স্ক্রিনটি বন্ধ হয়ে যায়, আমার প্রত্যাশার বিপরীতে। কিন্তু আপনার উত্তর কাজ করে।
অন্ধকাররেখা

3
zombieস্ক্রিনে বিকল্পটি সক্ষম করে আপনি এটি পরিবর্তন করতে পারেন । আপনার zombie xyমধ্যে রাখুন ~/.screenrc। এটি একটি সেশনের জন্য কেবলমাত্র zombie xyঅন্য একটি ফাইল রেখে এবং ব্যবহার করার জন্য এটি সক্ষম করা সম্ভব হবে -c fileতবে কোনও কারণে যখন আমি চেষ্টা করি তখন এটি কাজ করে না। বা কেবল ব্যবহার করুনsh -c 'yourcommand;while :;do sleep 9999; done'
অ্যালান কারি

@ অ্যালানক্র্রি, নাপ, এটি কোনওভাবেই কাজ করে না, যদিও কমান্ডটি পুরোপুরি চালিত হয় (এবং বেশ কয়েক ঘন্টা সময় নেয়) নিজে নিজে কোনও স্ক্রিনে চালিত হওয়ার পরে।
সেরিন

47

স্ক্রিনে একক কমান্ড চালাতে এবং আলাদা করতে, আপনি চেষ্টা করতে পারেন:

screen -dm sleep 10

একাধিক কমান্ড চালাতে, চেষ্টা করুন:

screen -dm bash -c "sleep 10; myscript.sh"

দয়া করে মনে রাখবেন যে কোনও প্রোগ্রাম সমাপ্ত হলে, স্ক্রিন (প্রতি ডিফল্ট) এতে থাকা উইন্ডোটিকে মেরে ফেলে।

আপনি যদি স্ক্রিপ্টটি শেষ হওয়ার পরে আপনার সেশনটি হত্যা না করতে চান exec shতবে শেষে যুক্ত করুন, যেমন:

screen -dm bash -c 'sleep 5; exec sh'

আপনার সমস্ত সেশন তালিকা করতে, চেষ্টা করুন:

screen -list

সম্পর্কিত: ইউনিক্স স্ক্রিন শুরু করুন, কমান্ড চালান, বিচ্ছিন্ন করুন


2
এটি আমার জন্য উবুন্টু 16.04 এ কাজ করেছিল। উপরন্তু আপনার সেশন তাই আপনি এটি পরে আসতে পারেন নাম করার জন্য, যোগ -S sessionname: screen -dmS MyLongRunningScript bash -c "..."
ড্যান ড্যাসকলেসকু

16

'স্লিপী' নামের সাথে পটভূমিতে নতুন সেশন শুরু করার জন্য

screen -S sleepy -dm sleep 60

'নিদ্রাহীন' সেশনটি হত্যা করার জন্য

screen -S sleepy -X quit      

কেন এটি কাজ করে না screen -S sleepy -dm "cd myfolder;sleep 60"?
টুলকিট

@ টুলকিট ইস্যুটি হ'ল আপনার উদ্ধৃতিতে কমান্ড রয়েছে এবং তাই এটি একটি বড় কমান্ড হিসাবে বিবেচিত হয়েছিল। স্পষ্টতই আমরা সেমিকোলনের কারণে এটিকে উদ্ধৃতিগুলির বাইরে নিতে পারি না। এটি সমাধান করতে, কমান্ডটি তেমনভাবে সম্পাদন করুন: স্ক্রিন-এস স্লিপ-ডিএম বাশ -c "সিডি মাইফোল্ডার; স্লিপ 60"
জেসন থম্পসন


0

আমার প্রোগ্রামটি থেকে বেরিয়ে আসার জন্য আমি যখন নিয়ন্ত্রণ সি (সিগ ইন্ট) টিপলাম তখন তা আমার কাছে ঘটে। এটি সমস্ত বাশ থেকে সমস্ত উপায়ে প্রস্থান করে। সুতরাং আমি এটি সাইন ইন ধরতে পেয়েছি। এবং শেষ বাশ থেকে প্রস্থান রোধ করুন। (প্রস্থান করতে প্রস্থান টাইপ করা প্রয়োজন)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

আমি সূচনাতে নোডেজ প্রোগ্রামগুলি চালানোর জন্য ক্রোন ব্যবহার করা দরকারী বলে মনে করি। এবং বুট সময় পর্দা চালানোর জন্য। ক্রোনটিতে বিশেষ ইভেন্ট সিনট্যাক্স @ রিবুট ইভেন্ট রয়েছে

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.