Ssh কমান্ড ব্যবহার করে পুনরায় বুট করার পরে সংযোগ বন্ধ হচ্ছে


18

আমি reboot -fইউনিক্স মেশিনটিকে রিবুট করার জন্য দূরবর্তীভাবে কমান্ডটি ব্যবহার করছি । সমস্যাটি হ'ল ssh সংযোগটি দীর্ঘকাল সক্রিয় থাকে যা আমি জানি না কেন? আমি মেশিনটি রিবুট করার সাথে সাথেই এসএসএস সংযোগটি বন্ধ করতে এবং আমার স্থানীয় শেলটিতে ফিরে যেতে চাই। আমি এটা কিভাবে করবো? নোট করুন -fপতাকা ছাড়াই রিবুট কমান্ড কাজ করে না।


1
কেন কেবল আপনার দূরবর্তী সংযোগটি (সিটিআরএল + ডি) থেকে বেরিয়ে যাবেন এবং শেল প্রম্পটটি না দেখে সার্ভারটিকে পুনরায় বুট করতে দিন?
gertvdijk

আমি একই কমান্ডে এটি কীভাবে করতে পারি?
coffeMug

2
আমি এর জন্য একটি সমাধান পেয়েছি যা অন্যদের জন্যও সহায়ক হতে পারে। আমি ssh এর সাথে সংযুক্ত কমান্ডটি শুরু করার পরে সংযোগটি বন্ধ করার জন্য নীচের কমান্ডটি ব্যবহার করেছি: ssh হোস্ট "হোস্ট মেশিনে চালানোর জন্য কমান্ড> / dev / null &" এই আদেশটি সংযোগটি কেন জোর করে তার কারণ আমি পুরোপুরি বুঝতে পারি না this বন্ধ হয়ে গেছে তবে কমপক্ষে এটি আমার পক্ষে সহায়ক ছিল। কমান্ডের আউটপুট / dev / নালকে পরিচালনা করার বিষয়টি যদি কেউ বুঝতে পারে এবং এটি কেন ssh সংযোগটি হত্যা করে তবে সে / সে এটি ব্যাখ্যা করতে পারলে ভাল হবে। :-)
coffeMug

ssh হোস্ট "হোস্ট মেশিনে চালানোর জন্য কমান্ড> / dev / null &"
coffeMug

1
এটি এই প্রশ্নের উত্তর নয়, তবে এটি যেভাবেই হোক দরকারী: এসএসএইচ ক্লায়েন্টের একাধিক কন্ট্রোল ক্যারেক্টার রয়েছে যা ক্লায়েন্টকে মেরে ফেলার জন্য অন্যান্য জিনিসগুলির সাথেও ব্যবহার করা যেতে পারে। নিয়ন্ত্রণের অক্ষরগুলি কেবলমাত্র একটি নতুন লাইনের পরে স্বীকৃত হয়, তাই টিপে টিপুন Enter। তারপরে ~.অধিবেশনটি শেষ করতে eg Enter ~?অন্যদের তালিকার জন্য।
টম

উত্তর:


22

কমান্ডটি reboot -fকখনই ফিরে আসে না (যদি না আপনি রিবুট করার অনুমতি না পান)। এটি জারি করা হয়েছে এমন স্থানে, এসএসএইচ ক্লায়েন্ট কিছু করার জন্য অপেক্ষা করছে, যা হতে পারে:

  • এসএসএইচ সার্ভার ক্লায়েন্টকে অবহিত করছে যে এমন কিছু ঘটেছে যার দিকে মনোযোগের প্রয়োজন রয়েছে, উদাহরণস্বরূপ যে এখানে প্রদর্শিত কিছু আউটপুট রয়েছে বা দূরবর্তী কমান্ডটি শেষ হয়েছে;
  • ক্লায়েন্ট পক্ষের কিছু ইভেন্ট, যেমন রিলে সংকেত;
  • একটি ক্লাব ক্লায়েন্টকে একটি রক্ষণশীল বার্তা প্রেরণের জন্য (এবং সার্ভারের জবাব না দিলে সংযোগটি বন্ধ করুন) চালিয়ে যাওয়ার জন্য একটি টাইমার গুলি চালিয়ে যাচ্ছে।

যেহেতু এসএসএইচ সার্ভার প্রক্রিয়াটি মারা গেছে, এসএসএইচ ক্লায়েন্টটি টাইমার না হওয়া পর্যন্ত মারা যাবে না।

আপনি যদি চালনা করেন ssh remotehost 'reboot -f >/dev/null &'তবে যা ঘটে তা হ'ল:

  1. রিমোট শেল rebootপটভূমিতে কমান্ডটি আরম্ভ করে ।
  2. যেহেতু সার্ভার-সাইড শেল কমান্ডটি প্রস্থান করেছে এবং স্ট্যান্ডার্ড আউটপুট খোলার জন্য ফাইল বর্ণনাকারী ধারণ করার কোনও প্রক্রিয়া নেই, এসএসএইচ সার্ভারটি সংযোগটি বন্ধ করে দেয়।
  3. rebootকমান্ড পুনরায় বুট করার মেশিন ঘটায়।

তবে এটি নির্ভরযোগ্য নয়: টাইমিংয়ের উপর নির্ভর করে ধাপ ৩ য় ধাপের আগে ঘটতে পারে happen টাইমার যুক্ত করা এটিকে অসম্ভব করে তোলে:

ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'

সম্পূর্ণরূপে নিশ্চিত হতে যে সার্ভার সাইডটি চলমান rebootপ্রতিশ্রুতিবদ্ধ, ক্লায়েন্টকে প্রতিশ্রুতিবদ্ধ হওয়ার আগে জানানোর আগে এটি রিবুট হয় না তা নিশ্চিত করার জন্য, সার্ভার থেকে ক্লায়েন্টে যাওয়ার জন্য আপনার একটি অতিরিক্ত বিজ্ঞপ্তি প্রয়োজন। এটি এসএসএইচ সংযোগের মাধ্যমে আউটপুট হতে পারে তবে এটি জটিল হয়ে ওঠে।


2
যদি কেউ দূরবর্তী হোস্ট (অনুরূপ সলিউশন) মধ্যে থেকে এই কাজ করতে একটি উপায় খুঁজছেন হয়: (sleep 1 && sudo reboot &) && exit। প্রথম বন্ধনীগুলি একটি সাব-প্রসেস স্প্যান করে, যা এক সেকেন্ড অপেক্ষা করে এবং তারপরে পুনরায় বুট শুরু করে। হোস্ট প্রক্রিয়া তত্ক্ষণাত্ ssh সেশনটি সমাপ্ত করে। আমি শেল গুরু নই, তবে এটি এখনও পর্যন্ত আমার পক্ষে কাজ করেছে।
গ্রিডো

@ গ্রিডো এটি দুর্দান্ত কাজ করেছে এবং এটি খুব সুন্দর একটি হ্যাক। আমি এটা ভালোবাসি. ভাগ করে নেওয়ার জন্য ধন্যবাদ!
জোশুয়া পিন্টার

5

আমার পক্ষে সেরাটি সম্পাদনের জন্য আমি এই সমাধানটি পেয়েছি।

-o "ServerAliveInterval 2"আপনার sshকমান্ড ব্যবহার করুন , যেমন:

$ ssh -o "ServerAliveInterval 2" root@remotehost reboot

উল্লিখিত বিকল্পটি ক্লায়েন্ট পক্ষ প্রতি 2 সেকেন্ডের মধ্যে একটি সুরক্ষিত চ্যানেলের মাধ্যমে সার্ভারটিকে পোকে তোলে। অবশেষে রিবুটিং এগিয়ে যাওয়ার সাথে সাথে, এটি প্রতিক্রিয়া জানাতে থামবে এবং ক্লায়েন্টটি সংযোগটি ছিন্ন করবে।


ধন্যবাদ রোমান, ম্যাজিকের মতো কাজ করে! :)
stdcerr

3

কিছু উত্তর নিকটে ছিল, তবে সঠিক উত্তরটি হ'ল:

ssh user@192.168.0.130 "nohup sudo reboot &>/dev/null & exit"

ব্যাখ্যা:

  • আপনি exitসর্বশেষ কমান্ড হিসাবে চান তাই শেষ কমান্ডের স্ট্যাটাস 0 (সাফল্য)। আপনি যদি চান তবে একটি ঘুমকে কিনে দিতে পারেন, তবে এটি প্রয়োজনীয় নয়
  • আপনার পটভূমিতে রিবুট চালানো দরকার, কারণ অন্যথায় সার্ভারটি সংযোগটি বন্ধ করবে এবং আপনি একটি ত্রুটি পাবেন। এটি এখনও বেশিরভাগ সিস্টেমে পুনরায় বুট করবে তবে আপনি যদি রিটার্নের স্থিতি স্ক্রিপ্ট করছেন তবে কমান্ডটি সঠিকভাবে সম্পাদন করা সত্ত্বেও ত্রুটি (0 নয়) হবে
  • পটভূমিতে চলমান হিসাবে যথেষ্ট নয়, stdinএবং stdoutএখনও SSH- র মাধ্যমে ভার্চুয়াল টার্মিনাল সংযুক্ত হয় তাই সংযোগ বন্ধ করা হবে না। ব্যাকগ্রাউন্ডে চলমান কমান্ডটি শেষ করতে এবং এসএসএইচ সেশনটির জন্য আপনার দুটি অতিরিক্ত জিনিস করা দরকার।
    • 1) আপনি পুনর্নির্দেশ করতে প্রয়োজন stdoutএবং stderrকরতে /dev/nullযাতে তারা ভার্চুয়াল টার্মিনাল যে SSH সেশান ঝুলিতে দ্বারা আপনাকে পুনঃনির্দেশিত করা হয় না। এই &>/dev/nullঅংশ।
    • 2) আপনাকে stdinএকই ফ্যাশনে অপঠনযোগ্য ফাইলে পুনর্নির্দেশ করতে হবে। শেল বিল্টিন এটাই nohupকরে।

প্রতিটি উপায়ে টার্মিনাল থেকে বিচ্ছিন্নভাবে ব্যাকগ্রাউন্ডে চলমান একটি কমান্ড exitসেশনটি বন্ধ করে দেবে এবং ভার্চুয়াল টার্মিনালের কোনও stdinবা stdoutবাকি নেই বলে এসএসএইচ ত্রুটি ছাড়াই সংযোগটি শেষ করবে।


1

আমি নিম্নলিখিত কমান্ডটি ব্যবহার করি:

ssh -t <hostname> 'sudo shutdown --reboot 0 && exit'

এখানে এটি কি করছে:

  • এটি পরের মুহুর্তে মেশিনটিকে পুনরায় বুট করার নির্দেশ দেয়, তবে এই আদেশের সময় নয়
  • এসএসএইচ থেকে পরিষ্কারভাবে প্রস্থান করুন
  • পুরো সময় এসএসএইচ টিটিওয়াই বজায় রাখে তাই সুডো খুশি এবং সঠিকভাবে সম্পাদন করতে পারে।

0

আপনি কি নিম্নলিখিত চেষ্টা করেছেন?

# shutdown -r now

আমি দেখতে পেয়েছি যে কয়েকটি সিস্টেমে আমি পাসে কাজ করেছি, রিবুট কমান্ডটিতে কিছু সমস্যা ছিল। তারপরে আবার আমি শাটডাউনয়ের ম্যানপেজে এমন কিছু খুঁজে পাচ্ছি না যা -f পতাকা সহ পুনরায় বুট করার মতো হবে।


1
হ্যাঁ, মেশিনটিতে শাটডাউন কাজ করে না যা আমি কিছু অদ্ভুত কারণে সংযোগ দেওয়ার চেষ্টা করছি। এই কারণেই আমি শাটডাউনটি পুনরায় চালু করতে পুনরায় বুট-ফ ব্যবহার করি।
coffeMug

0

পরবর্তী কমান্ড ব্যবহার করে ssh সেশন এবং রিবুট সিস্টেম থেকে প্রস্থান সম্পর্কে কীভাবে:

ssh login@host "reboot -f"

এটির পরে ssh বন্ধ করার জন্য কেবল Ctrl + C টিপুন।


0

আমি এর জন্য একটি সমাধান পেয়েছি যা অন্যদের জন্যও সহায়ক হতে পারে। Ssh এর সাথে সংযুক্ত কমান্ডটি শুরু করার পরে আমি সংযোগটি বন্ধ করতে নীচের কমান্ডটি ব্যবহার করেছি:

ssh host "command to run on the host machine > /dev/null &"

এই আদেশটি সংযোগটি বন্ধ করতে বাধ্য করার কারণটি আমি ঠিক বুঝতে পারি না তবে কমপক্ষে এটি আমার পক্ষে সহায়ক ছিল। যদি কেউ বুঝতে পারে যে এটি কেন ssh সংযোগটি হত্যা করে; দয়া করে ব্যাখ্যা করুন.


0

এটিতে 1 মিনিটের বিলম্ব প্রয়োজন তবে এটি আমার জন্য নির্ভরযোগ্যভাবে কাজ করেছে এবং এসএসএইচ ক্লায়েন্টের হ্যাংয়ের সমস্যা সমাধান করে:

    $ sudo shutdown +1; logout

এটি 1 মিনিটের পরে সিস্টেম বন্ধ করার সময়সূচী দেয় যা লগআউট করার জন্য সময় দেয় এবং তাই এসএসএইচ সমাপ্তিটি সম্পূর্ণ করতে দেয় complete আপনি যতটা সম্ভব অল্প সময় অপেক্ষা করতে চান, আপনি দ্রুত সময়ের কাছে পৌঁছে যাওয়া সময়ের +1সাথে এটি প্রতিস্থাপন করতে পারেন HH:MMতবে এটি সঠিক সময়ে জটিল হতে পারে এবং 59 সেকেন্ড বিলম্ব হতে পারে।


0

একটি সহজ উপায় যা আমি খুঁজে পেয়েছি তা হ'ল শাটডাউন / রিবুটটিকে ব্যাকগ্রাউন্ড টাস্ক হিসাবে আখ্যায়িত করা ('&' ব্যবহার করে), সেশনটি 'নোহুপ'-এর সাথে বন্ধ হয়ে যাওয়ার সাথে সাথে তা তাত্ক্ষণিক শেল / সেশন প্রস্থান সহ বন্ধ করা থেকে রক্ষা করা:

nohup shutdown -r now & exit

এই পদ্ধতিতে, এসএসএইচ ক্লায়েন্টটি স্থগিত হয় না, যেহেতু অধিবেশনটি তত্ক্ষণাত্ প্রস্থান হয়, যখন রিমোট সিস্টেমটি পুনরায় বুটটি অ্যাসক্রোনাক্রমে এগিয়ে যায়।


বা আপনার সিস্টেমের সমতুল্য পুনরায় বুট করার জন্য "এখন শাটডাউন-আর" এর সমতুল্য করুন ....
মাইকডব্লিউ

-2

এই আদেশটি ব্যবহার করে দেখুন:

$ reboot -f && exit

2
দুর্ভাগ্যক্রমে এটি কাজ করে না।
coffeMug

1
@AKh_Sw "কাজ করে না" এর জন্য নির্দিষ্ট থাকুন।
gertvdijk

@AKh_Sw: আপনি '$' টাইপ সাইন এটি কাজ করবে না
tH0r

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