দূরবর্তী অবস্থান থেকে একটি প্রক্রিয়া শুরু করতে এসএসএইচ ব্যবহার করে


18

আমি একটি স্ক্রিপ্ট লিখেছি যা আমি আমার নিয়ন্ত্রণে থাকা বেশ কয়েকটি মেশিনে একটি নতুন পরিষেবাটি পুশ এবং মোতায়েন করতে ব্যবহার করছি এবং প্রক্রিয়াটি কার্যকর করতে আমি ssh ব্যবহার করে দূরবর্তীভাবে প্রক্রিয়া শুরু করি start দুর্ভাগ্যক্রমে, আমি যখনই প্রক্রিয়া শুরু করতে এসএসএইচ ব্যবহার করি তখন এসএসএইচ কমান্ডটি কখনই ফিরে আসবে না বলে স্ক্রিপ্টটি থামিয়ে দেয়।

কমান্ডটি নির্দিষ্ট করা হয়েছে: ssh $ ব্যবহারকারী @ $ হোস্ট "/ রুট / কমান্ড &" command আমি যখনই সাধারণ কমান্ডগুলি চালিত করি যেমন পিএস বা যিনি, এসএসএইচ কমান্ড তত্ক্ষণাত্ ফিরে আসে, তবে আমি যখন চেষ্টা করি এবং আমার প্রক্রিয়া শুরু করি তখন তা ফিরে আসে না। আমি আমার প্রক্রিয়াটিকে একটি সাধারণ বাশ স্ক্রিপ্টে মোড়ানোর মতো কৌশলগুলি চেষ্টা করেছি যা প্রক্রিয়া শুরু করে এবং তারপরে প্রস্থান করে, তবে এটি এসএসএইচ কমান্ডকেও স্তব্ধ করে রাখে (এমনকি যদি ব্যাশ স্ক্রিপ্ট একটি সাফল্যের বার্তা প্রতিধ্বনিত করে এবং সাধারণত বেরিয়ে আসে)।

কারও কি এই আচরণের কারণ ঘটছে সে সম্পর্কে কোনও অন্তর্দৃষ্টি রয়েছে এবং প্রক্রিয়া শুরু হওয়ার সাথে সাথে আমি কীভাবে এসএসএইচ কমান্ডকে ফিরে আসতে পারি?

আপনার অন্তর্দৃষ্টি জন্য ধন্যবাদ!


আপনি যে সঠিক কমান্ড লাইনটি ব্যবহার করছেন তা পোস্ট করুন ... পাসওয়ার্ড / ব্যবহারকারীর নাম / আইপি বাদ দিন
জোসেফ কার্ন

ssh $ SSH_USER @ $ HOST_ADDR "/ মূল / অ্যাপনাম &"
rmrobins

আমার উল্লেখ করা উচিত যে আমি এসএসএইচ কীগুলি সেট আপ করেছি, তাই দূরবর্তী সিস্টেমে কমান্ড চালানোর জন্য পাসওয়ার্ড ব্যবহার করার প্রয়োজন নেই।
rmrobins

@rmrobins, একটি খুব ভাল পদক্ষেপ - সর্বজনীন কী প্রমাণীকরণ সেট করে।
নিক

উত্তর:


28

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

পার্শ্ব প্রতিক্রিয়া হিসাবে, এই সংযোগগুলি বন্ধ না হওয়া পর্যন্ত এটি চলতে থাকবে, যা কেবল তখনই ঘটে যখন রিমোট কমান্ড এবং তার সমস্ত বাচ্চারা (!) বন্ধ করে দেয় (কারণ শিশুরা, যা "&" শুরু হয়, তাদের থেকে স্ট্যান্ড * উত্তরাধিকার সূত্রে প্রাপ্ত হয়) অভিভাবক প্রক্রিয়া এবং এটি উন্মুক্ত রাখুন)।

সুতরাং আপনার মতো কিছু ব্যবহার করা দরকার

ssh user@host "/script/to/run < /dev/null > /tmp/mylogfile 2>&1 &"

<,> এবং 2> & 1 আপনার টার্মিনাল থেকে দূরে স্টিডিন / স্টেডআউট / স্টেডারকে পুনঃনির্দেশ করুন। "&" তারপরে আপনার স্ক্রিপ্টটিকে পটভূমিতে যেতে দেয়। উত্পাদনে আপনি অবশ্যই একটি উপযুক্ত লগফাইলে স্টডিন / এআরআর পুনর্নির্দেশ করবেন।

দেখা

http://osdir.com/ml/network.openssh.general/2006-05/msg00017.html

সম্পাদনা:

শুধু জানতে পারলেন যে < /dev/nullউপরে প্রয়োজন নেই (কিন্তু পুনঃনির্দেশিত stdout- এ / মাত্রই ভুল করে হয় )। কেন জানি না ...


ধন্যবাদ, আমি ঠিক এটিই সন্ধান করছিলাম - এটি আমার কাছে ঘটেনি যে প্রক্রিয়াটি স্ট্যান্ড * এর উত্তরাধিকারী হবে এমনকি এটি ব্যবহার করার সময় এবং ব্যাকগ্রাউন্ডে এটি চালু করার জন্য।
rmrobins

+1! আমার জন্য কাজ কর. এবং আপনি লগ ফাইল প্রতিধ্বনি করে আউটপুট মুদ্রণ করতে পারেন: ssh user@host "/script/to/run > /tmp/ssh.stdout 2>&1 && cat /tmp/ssh.stdout && rm -f /tmp/ssh.stdout"
ফিশড্রাউনড

5

আপনি nohup চেষ্টা করতে পারে । আরও তথ্যের জন্য ম্যান nohup।

ssh host "nohup script &"

আপনি যদি রিমোট মেশিনে আউটপুট রাখতে চান তবে এখানে একটি বৈকল্পিক

ssh user@host 'export REMOTE=myname; nice nohup ./my-restart >
logfile.log 2>&1 &'

5

অন্য বিকল্প হ'ল বিচ্ছিন্নভাবে আগুন লাগিয়ে দেওয়া screen(1), এরকম কিছু:

ssh -l user host "screen -d -m mycommand"

এটি একটি বিচ্ছিন্ন স্ক্রিন শুরু করবে (যা এর অভ্যন্তরের সমস্ত ইন্টারঅ্যাকশনকে ক্যাপচার করে) এবং তারপরে তাত্ক্ষণিকভাবে এসএসএস সেশনটি সমাপ্ত করে ফিরে আসবে।

কিছুটা আরও দক্ষতার সাথে আপনি বেশ জটিল রিমোট কমান্ড কলগুলি কল করতে পারেন।


4
 -f      Requests ssh to go to background just before command execution.
         This is useful if ssh is going to ask for passwords or
         passphrases, but the user wants it in the background.  This
         implies -n.  The recommended way to start X11 programs at a
         remote site is with something like ssh -f host xterm.

         If the ExitOnForwardFailure configuration option is set to “yes”,
         then a client started with -f will wait for all remote port for‐
         wards to be successfully established before placing itself in the
         background.

1
এই পদ্ধতির সমস্যাটি হ'ল এসএসএইচ কমান্ডটি আসলে শেষ হয় না, এটি কেবল ব্যাকগ্রাউন্ডে লুকানো থাকে, সুতরাং স্ক্রিপ্টটি চালানো হোস্টের পটভূমিতে প্রচুর পরিমাণে এসএসএইচ কমান্ড থাকবে যা কখনই ফিরে আসে না কারণ এসএসএইচ কমান্ডগুলি কখনই ফিরে আসে না ( অর্থাত্ মূল সমস্যার সমাধান করতে চাই)
rmrobins

-1

আমি মনে করি সঠিক উপায় হবে

ssh user@host exec script.sh &

না, এটি আমার পক্ষে কাজ করে না। এটা কেন করা উচিত?
স্লেসকে

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