আমি কীভাবে বিচ্ছিন্ন মোশ সেশনে পুনরায় সংযুক্ত হতে পারি?


157

আমি কীভাবে বিচ্ছিন্ন মোশ সেশনে পুনরায় সংযুক্ত হতে পারি বা অন্যথায় পরিত্রাণ পেতে পারি

Mosh: You have a detached Mosh session on this server (mosh [XXXX]).

অর্থাত্ মোশ এর সমতুল্য

screen -D -R

বা সম্ভবত

screen -wipe

তদুপরি, ডকুমেন্টেশনে এই উত্তরটি কোথায় পাওয়া যাবে?

উত্তর:


197

সুরক্ষার কারণে আপনি পুনরায় সংযোগ করতে পারবেন না, https://github.com/keithw/mosh/issues/394 দেখুন

বিচ্ছিন্ন অধিবেশনটিকে হত্যা করতে, সেই বার্তায় প্রদর্শিত পিআইডি নম্বরটি ব্যবহার করুন (এটি 'এক্সএক্সএক্সএক্স' অংশ part) উদাহরণস্বরূপ, যদি আপনি দেখতে পান -

Mosh: You have a detached Mosh session on this server (mosh [12345]).

এবং এই আদেশটি চালাতে পারেন:

kill 12345

এছাড়াও, সমস্ত মোশ সংযোগ বন্ধ করতে আপনি করতে পারেন:

kill `pidof mosh-server`

মনে রাখবেন আপনি বর্তমানে মোশের মাধ্যমে সংযুক্ত থাকলে এই শেষ আদেশটি আপনাকে সংযোগ বিচ্ছিন্ন করে দেবে।


34
@artfulrobot কারন এমন একটি সুযোগ রয়েছে যে বিচ্ছিন্ন অধিবেশনটি কোনও মশ-ক্লায়েন্টের অন্তর্ভুক্ত যা এখনও কোথাও বেঁচে আছে। মোশ সেশনগুলি ঘোরাঘুরি করে এবং স্থগিত / পুনঃসূচনা (যেমন, "হাইবারনেশন") চক্রের মাধ্যমে বেঁচে থাকতে পারে। সমস্যাটি মোশ সমাধান করে না (এবং সহজেই পারে না) সনাক্ত করে যে ক্লায়েন্ট মেশিনটি মোশির অধিবেশন বন্ধ করে না দিয়ে পুনরায় চালু করেছে।
বিনকি

7
killall mosh-serverপরিবর্তে না করার কোনও কারণ আছে কি ? বিশেষত যেহেতু পিডোফ এবং কিল্ল যাইহোক সত্যিই একই জিনিস।
জর্দান

6
@Jordan: কিছু ব্যবস্থা (সোলারিস, উদাহরণস্বরূপ) তারিখে, killallনা ঠিক তা বলেছেন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

4
আপনি যদি মোশের সাথে সংযুক্ত থাকেন এবং আপনি চালনা করেন তবে killall mosh-serverআপনি সংযোগ বিচ্ছিন্ন হয়ে যাবেন।
0xcaff

1
@ 0 এক্সক্যাফ যদি আপনি মোশের সাথে সংযোগ স্থাপন করেন এবং চালনা করেন তবে kill `pidof mosh-server`আপনি ঠিক একইভাবে বিচ্ছিন্ন হয়ে যাবেন
ডেভিড

26

আমি অবাক হয়ে, আমি মোশি ক্লায়েন্টটিকে চেকপয়েন্ট এবং পুনঃসূচনা করতে সিআরআইইউ ( https://criu.org ) ব্যবহার করেছি এবং এটি কাজ করেছে।

জঘন্য.

আপনার মোশ-ক্লায়েন্টের পিআইডি সন্ধান করুন:

$ PS -ef | গ্রেপ মশ

তারপরে, তাদের নির্দেশাবলী অনুসারে সিআরআইইউ ইনস্টল করুন।

তারপরে, চেকপয়েন্টটি এটির মতো:

$ এমকেডির চেকপয়েন্ট

do সুডো

তারপরে, এটি পুনরুদ্ধার করুন:

do sudo ./criu --D চেকপয়েন্ট - শেল-কাজ

এবং, এটি আছে। আপনার মোশ ক্লায়েন্ট ফিরে এসেছে।

তবে একটি বিষয় লক্ষণীয় হ'ল যদি আপনার ল্যাপটপটি পুনরায় চালু হয় (যা আমরা সুরক্ষার চেষ্টা করছি তার পুরো বিষয়), মোশ monotonicক্লায়েন্টের পক্ষে সময় ট্র্যাক করার জন্য একটি ঘড়ি ব্যবহার করে যা রিবুটগুলি জুড়ে কাজ করে না। এটি কাজ করবে না, তবে, যদি আপনার ল্যাপটপটি ক্র্যাশ হয়ে যায় তবে এটি কাজ করবে না কারণ মোশ সিকোয়েন্স নম্বরগুলি চেকপেন্ড করা সংস্করণটির সাথে সিঙ্কের বাইরে চলে যাবে (বাইনারি পুনরায় শুরু হবে, তবে যোগাযোগ বন্ধ হবে)।

এটি ঠিক করার জন্য, আপনাকে মোশকে এটি করা বন্ধ করতে এবং মোশ উত্স কোডটি ডাউনলোড করতে বলা উচিত। তারপরে, এই ফাইলটি সম্পাদনা করুন:

সিডি মোশ

vim configure.ac

তারপরে, অনুসন্ধান করুন GETTIMEএবং সেই লাইনটি মন্তব্য করুন।

তারপরে:

আপনি যদি প্রথমবারের মতো ক্লোন করে থাকেন তবে অটোরেকনফ # বা

./সজ্জিত করা

করতে

ইনস্টল করা

এর পরে, আপনার সিআরআইইউ-চেকপেন্ডেড মোশ ক্লায়েন্ট সেশনগুলি পুনরায় বুট থেকে বাঁচবে।

(স্পষ্টতই আপনার চেকপয়েন্টগুলি যথাযথভাবে কার্যকর করার জন্য কিছু লিখতে হবে But তবে এটি পাঠকের পক্ষে অনুশীলন)।


1
পুনরুদ্ধারের পরে পর্দার আউটপুট রিফ্রেশ করতে 'সিটিআরএল-এল' টাইপ করতে ভুলবেন না।
মাইকেল গ্যালাক্সি

6
নিছক কৌতূহলের বাইরে আমি যে মোশ ক্লায়েন্ট সেশনটি মিস করছি তা পুনরুদ্ধার করার কি কোনও ব্যবহারিক সুবিধা রয়েছে? আমি মোশের উপর টিএমউक्स চালাই এবং কেবল ক্লায়েন্টের উপরে মোশ পুনরায় চালু করতে পারি এবং টিএমউक्सটিকে পুনরায় সংযুক্ত করতে পারি ... এটির শীতল (যা এটি সত্যই সত্যই!) ব্যতীত অন্য কিছু করার সুবিধা রয়েছে?
eskhool

1
দীর্ঘ উত্তর: github.com/mobile- Shell / mosh / issues / 394 সংক্ষিপ্ত উত্তরটি হ্যাঁ: যদি ইতিমধ্যে টার্গেট সার্ভারে মোশ-সার্ভার ডিমন চলমান থাকে তবে কারও কাছে tmux সেশনের প্রয়োজন হবে না। এটি কেবল ঝোপানো মোশ ডেমনকে চারপাশে ফেলে রাখে না, এটির আরও একটি কী-স্ট্রোকের সেট যা আমাদের প্রথম স্থানে টাইপ করতে হবে না।
মাইকেল গ্যালাক্সি

1
মোশ এসএসএইচের বিকল্প (কিছু ক্ষেত্রে), পর্দার জন্য নয়। কোথ কিথউ (মোশ লেখক)
গিথুবে

19

আমি বুঝতে পারি এটি একটি পুরানো পোস্ট, তবে মোশি লেখক কেথ উইনস্টেইনের পরামর্শ অনুসারে এটির একটি খুব সহজ সমাধান রয়েছে: https://github.com/mobile-shell/mosh/issues/394

"ঠিক আছে, প্রথমে, আপনি যদি একাধিক ক্লায়েন্টের (বা ক্লায়েন্টের মৃত্যুর পরে) একটি সেশনের সাথে সংযুক্ত করার ক্ষমতা চান তবে আপনার পর্দা বা tmux ব্যবহার করা উচিত Mos মোশ স্ক্রিনের জন্য নয়, এসএসএইচের বিকল্প (কিছু ক্ষেত্রে) is অনেক মোশি ব্যবহারকারী একে স্ক্রিনের সাথে একসাথে ব্যবহার করে এবং এটি সেভাবেই পছন্দ করে। "

পরিস্থিতি: আমি মোশের মাধ্যমে একটি রিমোট সার্ভারে লগ ইন করেছি। আমি তারপরে স্ক্রিনটি চালিয়েছি এবং উদাহরণস্বরূপ, স্ক্রিন সেশনে একটি প্রক্রিয়া চলছে। আমি সংযোগটি হারিয়েছি (ল্যাপটপের ব্যাটারি মারা যায়, নেটওয়ার্ক সংযোগ হারাতে পারে)। আমি আবার মোশের মাধ্যমে সংযুক্ত হয়ে সার্ভারে সেই বার্তাটি পেয়েছি,

মোশ: আপনি এই সার্ভারে মোছ সেশনটি আলাদা করেছেন (মোশ [এক্সএক্সএক্সএক্স])।

আমাকে যা করতে হবে তা হ'ল পূর্বের মশ সেশনটি মেরে ফেলতে

XXXX হত্যা করুন

এবং স্ক্রিন সেশনে পুনরায় সংযুক্তি, যা এখনও বিদ্যমান

পর্দা -r

এখন, হটপ (বা যা কিছু প্রক্রিয়া চলছিল) ঠিক তেমনই আবার ফিরে এসেছিল ঠিক যেমনটি কোনও বাধা ছাড়াই ছিল T এটি বিশেষত আপগ্রেডগুলি বা অন্যান্য প্রক্রিয়াগুলি চালনার জন্য দরকারী যা হঠাৎ বাধা হয়ে থাকলে সার্ভারকে অগোছালো, অজানা অবস্থায় রেখে যাবে। আমি ধরে নিয়েছি আপনি tmux দিয়েও এটি করতে পারেন, যদিও আমি চেষ্টা করে দেখিনি। আমি বিশ্বাস করি এটিই অ্যানিহিল্যানিক এবং এসখুল পরামর্শ দিচ্ছিল।


2
এটি একটি দুর্দান্ত উত্তর। আপনাকে ধন্যবাদ, এবং হ্যাঁ আমি নিশ্চিত করেছি যে এটি tmux এর সাথে একই কাজ করে।
laughing_man

10

ভার্তার উত্তরের যোগ হিসাবে, আমি বর্তমান কমান্ড বাদে সমস্ত মোশ সংযোগ বন্ধ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করি:

pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill


যদি কোনও পুরানো মশ সেশন হয় না, এক্সকিলে ত্রুটি ঘটবে। আরও ভাল ব্যবহারpgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) && xargs kill || echo "no active sessions to kill"
rubo77

4

@ বার্তা উল্লেখ করেছেন যে, মোশ মালিকরা সুরক্ষার কারণে বিভিন্ন ক্লায়েন্টের কাছ থেকে পুনরায় পাঠানোর পক্ষে নয়। সুতরাং যদি আপনার ক্লায়েন্ট চলে যায় (যেমন আপনি আপনার ল্যাপটপটি পুনরায় চালু করেছেন) তবে আপনার একমাত্র বিকল্পটি সেশনগুলি মেরে ফেলা হবে।

কেবল বিচ্ছিন্ন সেশনগুলিকে হত্যা করতে আপনি নীচের লাইনটি ব্যবহার করতে পারেন (যা আমার কাছে আমার একটি নাম হিসাবে আছে .bashrc)

who | grep -v 'via mosh' | grep -oP '(?<=mosh \[)(\d+)(?=\])' | xargs kill

এই আদেশটি নির্ভর করে যে whoমোশ সেশনগুলি সহ সংযুক্ত ব্যবহারকারীদের তালিকাবদ্ধ করে, কেবল সংযুক্ত মশ সেশনের "মশ মাধ্যমে" থাকে এবং মশ সেশনগুলি তাদের বর্গাকার বন্ধনীগুলিতে থাকে fact সুতরাং এটি কেবল বিচ্ছিন্ন মশ সেশনের জন্য পিডগুলি সন্ধান করে এবং এক্সার্গস ব্যবহার করে হত্যা করতে তাদের পাস করে।

এখানে whoরেফারেন্সের জন্য একটি উদাহরণ ফলাফল:

$ who
theuser    pts/32       2018-01-03 08:39 (17X.XX.248.9 via mosh [193891])
theuser    pts/17       2018-01-03 08:31 (17X.XX.248.9 via mosh [187483])
theuser    pts/21       2018-01-02 18:52 (mosh [205286])
theuser    pts/44       2017-12-21 13:58 (:1001.0)

একটি বিকল্প হ'ল মোশ-সার্ভার পরিবেশ পরিবর্তনশীল ব্যবহার করা MOSH_SERVER_SIGNAL_TMOUT। আপনি .bashrcএটি সার্ভারের পাশে 300 এর মতো কিছুতে সেট করতে পারেন । তারপরে আপনি যদি pkill -SIGUSER1 mosh-serverএটি করেন তবে এটি কেবলমাত্র মশ-সার্ভারগুলিকে হত্যা করবে যা গত 300 সেকেন্ডে সংযুক্ত হয়নি (অন্যরা SIGUSER1 এড়িয়ে যাবে)। মশ-সার্ভার ম্যান পৃষ্ঠাতে আরও তথ্য । আমি উপরের কমান্ডটি ব্যবহার করছি কারণ একসময় এলিয়াস হয়ে গেলে এটি আমার কাছে সহজ বলে মনে হয়।

দ্রষ্টব্য, @ অ্যানিহিল্যানিক দ্বারা উল্লিখিত হিসাবে, আপনি যদি আপনার মোশ সেশনের ভিতরে টিএমউक्स / স্ক্রিন ব্যবহার করছেন তবে সেই মোড়ক সেশনগুলি মেরে ফেলার পরে সেই টিএমউक्स / স্ক্রিন সেশনগুলি এখনও রয়েছে। সুতরাং আপনি এখনও তাদের সাথে সংযুক্ত করতে পারেন (যাতে আপনি নিজেরাই মশ সেশনগুলি মেরে সত্যিই বেশি হারাবেন না)।


3

উত্তর এখানে দাবি করেন যে হত্যাকাণ্ড mosh-serverএকমাত্র বিকল্প হয়, মূলত অপ্রচলিত হিসাবে আমরা ব্যবহার করতে পারি criuএবং reptyrপুনরুদ্ধার ও নির্বিচারে প্রসেস সংযুক্ত করতে।

এটি উল্লেখ করার দরকার নেই যে আজকাল আমরা kill -USR1 mosh-serverকেবল whoআমাদের নিজের অধিবেশনটি হত্যা না করার জন্য অনিরাপদ আউটপুট বা জটিল কমান্ডগুলি অবলম্বন না করে কেবল একটি পরিষ্কার এবং নিরাপদ উপায়ে আলাদা আলাদা সেশনগুলি হত্যা করতে পারি ।

criuমাইকেল আর। হাইনসের জবাবের পাশে , আরও কিছুটা "হালকা-ওজন" রয়েছে reptyrযা প্রক্রিয়াটি পুনরায় সংযুক্ত করতে mosh-server(যেমন mosh-serverনিজেই নয়) ব্যবহার করা যেতে পারে । আমি সাধারণত ব্যবহার করি

pstree -p <mosh-server PID>

বিচ্ছিন্ন মোশ-সার্ভারের অধীনে প্রক্রিয়া গাছের তালিকা তৈরি করতে এবং তারপরে

reptyr PID

আমার বর্তমান টার্মিনালে কাঙ্ক্ষিত প্রক্রিয়াটি পুনরায় সংযুক্ত করতে। আমি যত্ন করি এমন সমস্ত প্রক্রিয়াগুলির পদ্ধতির পুনরাবৃত্তি করার পরে, আমি

kill -USR1 <mosh-server PID>

তবে আমি জানি যে কেবলমাত্র আমার সেশনগুলি (শেয়ারড সিস্টেম) আমি হত্যা করি kill


আমি পেয়েছিUnable to attach to pid 10103: Permission denied
rubo77

-1

চলমান টাস্কের তালিকা পেতে পিএস কমান্ড ব্যবহার করুন বা পিএস-শেফ ব্যবহার করুন গ্রেপ মশ

এই কমান্ডটি ব্যবহার করে মোশ পিআইডি হত্যা করুন:

kill <pid>

এছাড়াও, সমস্ত মোশ সংযোগ বন্ধ করতে আপনি করতে পারেন:

মনে রাখবেন আপনি যদি বর্তমানে মোশের মাধ্যমে সংযুক্ত থাকেন তবে এটি আপনাকে সংযোগ বিচ্ছিন্ন করে

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