লিনাক্সে এমন কোন কমান্ড রয়েছে যা এটি শেষ না হওয়া পর্যন্ত অপেক্ষা করে?


11

আমি একটি উইন্ডোজ ব্যাচ ফাইল তৈরির চেষ্টা করছি, যা পোর্ট ফরওয়ার্ডিং দিয়ে পুটি / প্লিংক শুরু করে এবং অন্য কিছুই নয়। উইন্ডোজ অংশটি এখনও প্রস্তুত:

start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1

প্রমাণীকরণের পরে আমি অন্যান্য কমান্ড কার্যকর করতে অনুমতি দিতে চাই না, তাই আমি ForceCommandএকটি Match Userঘোষণার সাহায্যে ব্যবহার করছি :

Match User sampleUser
    ForceCommand echo 'Success! Close this window to log out.'

সমস্যাটি হচ্ছে, আমার ব্যাচের ফাইলটি চালানো সঠিকভাবে পুটি শুরু হয়, তবে এটি আমার নির্দিষ্ট পাঠ্য প্রতিধ্বনি সম্পাদন করার সাথে সাথেই বন্ধ হয়ে যায়।

আমার ধারণাটি এরকম কিছু ব্যবহার করা:

ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC

এইভাবে, পুট্টি / এসএসএইচটি সংযোগটি টিকিয়ে রাখতে হবে এবং আমার পোর্ট ফরওয়ার্ডিং ছাড়বে না।

আমি কমান্ডগুলি ভেবেছি yes, pingবা readতাদের মতো , কিন্তু তারা

  • আমার টার্মিনাল উইন্ডো স্প্যামিং হয়
  • আসলে স্টাফ করছে / অপ্রয়োজনীয় সিপিইউ লোড তৈরি করছে
  • কেউ চাপ দিলে অপ্রত্যাশিতভাবে বন্ধ হতে পারে

এমন কোনও কমান্ড রয়েছে যা চিরকালের জন্য কিছুই করবে না, যতক্ষণ না কেউ Ctrl + C দিয়ে এটি বন্ধ করে দেয় বা পুট্টি উইন্ডোটি বন্ধ করে এসএসএইচ সংযোগ বন্ধ করে দেয়?

আমার কী ব্যবহার করা উচিত waitTillControlC?


আমি superuser.com / প্রশ্নগুলি / 5882929 /… এর মতো প্রশ্ন পেয়েছি তবে তারা প্রস্তুত শেল দিয়ে ব্যবহারকারীকে ছেড়ে চলে যাবে।
stuXnet

উত্তর:


13

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

উদাহরণস্বরূপ এটি এখানে এক সন্দেহজনক একশত বছর ঘুমানোর চেষ্টা করবে এবং যেভাবেই হোক অনুরোধটি মেনে চলার জন্য এটি যথেষ্ট পরিমাণে করবে:

echo "Something"; sleep 36500d

বিকল্পভাবে, আপনি Enterকীটি টাইপ না করা পর্যন্ত এটি খুব অবরুদ্ধ হওয়া উচিত :

echo "Something"; read foo

9

-Nপরিবর্তে বিকল্প চেষ্টা করুন । plinkডকুমেন্টেশন থেকে :

-N        don't start a shell/command (SSH-2 only)

ম্যান পৃষ্ঠাতে বর্ণিত sshবিকল্প হিসাবে এটি একই আচরণ :-N

-N      Do not execute a remote command.  This is useful for just for-
         warding ports (protocol version 2 only).

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। অন্যরা কীভাবে কার্যকরী করতে হয় তা বলেন, তবে এটি সঠিকভাবে কীভাবে করা যায় এটি বলে ।
মোশে কাটজ

সম্পাদনার জন্য ধন্যবাদ; উইন্ডোজ বাক্স চেক করার জন্য নেই, আমি অন-লাইনে প্লিংক ডকগুলি সন্ধান করার জন্য ভাবি নি।
দ্য রিপোর্টার

এই উত্তরটি আমার প্রয়োজনের সাথে খাপ খায় না, কারণ I don't want to allow to execute other commands after authentication-Nএটি ক্লায়েন্ট-সাইডে সম্পন্ন করবে, যাতে আপনি প্রমাণীকরণের পরে অন্যান্য কমান্ড কার্যকর করতে -N সরাতে পারেন।
স্টুএক্সনেট

8

এটি কোনও পরিমাণ সিপিইউ পাওয়ার ব্যবহার না করে চিরদিনের জন্য ঘুমা উচিত sleep

echo "Something" && while true; do sleep 9999; done

ForceCommandআপনিও ক্লজের মতো কমান্ড দিতে পারবেন কিনা তাও আমি নিশ্চিত নই । শেল স্ক্রিপ্টে আপনার কমান্ডটি লাগাতে হতে পারে।

#!/usr/bin/env bash
echo "Success! Close this window to log out." && while true; do sleep 9999; done

এই স্ক্রিপ্টটির অবশ্যই কোনও স্থানে থাকা উচিত এবং এরকম অনুমতি থাকতে হবে যাতে সার্ভারে কোনও সাধারণ ব্যবহারকারী এটি লিখতে পারে না।

Match User sampleUser
    ForceCommand /usr/bin/waitforever

সম্পাদন করা

আমি একটি কমান্ড পেয়েছি যা আরও মার্জিত বলে মনে হচ্ছে:

echo "Something" && tail -f /dev/null

tail -fবাইটগুলি ফিরতে কোনও ফাইল বা স্ট্রিমের জন্য অপেক্ষা করে। (অন্যথায় রিয়েলটাইমে লগগুলি দেখার জন্য দরকারী)) /dev/nullকখনই বাইটগুলি ফিরবে না। আর তাই আদেশটি চিরকাল ঘুমাবে।


এই মুহুর্তে, আমি নিজের জন্য একটি ঘুমের লুপ চেষ্টা করছিলাম - হ্যাঁ, এটি অবশ্যই কাজ করে! এমনকি ফোর্সকমন্ডের সাথে সরাসরি:ForceCommand echo 'congrats' && while true; do sleep 9999; done
stuXnet

tail -f /dev/nullপ্রযুক্তিগতভাবে 9999 লুপের চেয়ে খারাপ। প্রক্রিয়াটি প্রতি 2 ঘন্টা এবং 56 মিনিটের পরিবর্তে প্রতি সেকেন্ডে জেগে ওঠে।
jlliagre

আমি এটি এখানে পেয়েছি: unix.stackexchange.com/questions/42901/… এই প্রশ্নের উত্তরের ব্যক্তি দাবি করেন "(এটি ধরে নেওয়া অভ্যন্তরীণভাবে নিখরচায় ব্যবহার করা হয়, সেখানে কোনও পোলিং বা জাগ্রত হওয়া উচিত নয়, সুতরাং বিজোড় চেহারা ছাড়া অন্যটি যথেষ্ট হওয়া উচিত) "এই বিবৃতি বা লেজটি ব্যবহার করে এমন ধারণাটি কি inotifyভুল?
nitro2k01

অনুমানটি সঠিক, যখন পাওয়া যায় tailতা উত্তোলনের জন্য অনুকূলিত হয় inotify। সাম্প্রতিক পর্যায়ে পর্যাপ্ত বিতরণ না হলে বেশিরভাগ ক্ষেত্রে এটি ডিফল্ট কেস হওয়া উচিত। যাইহোক, আমি কেবল একটি লিনাক্স ল্যাপটপে পরীক্ষা করেছি এবং পর্যবেক্ষণের সাথে উত্সাহব্যঞ্জক ক্রিয়াকলাপ tailপর্যবেক্ষণ করেছি /dev/nullযাতে ঘড়ির চক্রের নিদ্রায় ঘুম হওয়া অবশ্যই খারাপ।
jlliagre

আমি বিশ্বাস করি না যে tailসর্বদা প্রতি সেকেন্ডে জেগে উঠবে। ফলাফলের সম্ভাব্য কারণ হ'ল আপনি এটিকে একটি টার্মিনালে চালাচ্ছেন যা tailকোনও কারণেই যোগাযোগ করতে পারে , যেখানে sleepহবে না। কেন তাত্পর্যপূর্ণভাবে কেবল নিরীক্ষণে tailজেগে ওঠার কোনও কারণ নেই । /dev/null
nitro2k01

0

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

echo "your commands" && while :; do sleep 1; done

1
ভবিষ্যতের দর্শনার্থীদের জন্য আপনার কীভাবে এটি কাজ করে তার একটি সংক্ষিপ্তসার সরবরাহ করা উচিত। অনেকেরই জানা থাকতে পারে তবে আপনি সমস্ত ইচ্ছাশক্তি ধরে নিতে পারবেন না।
নার্ডওয়ালার

sleepসিপিইউতে দীর্ঘ সময়কাল আরও সহজ হবে, যদিও sleep 1গত দুই দশকে নির্মিত কোনও বিষয়ে যথেষ্ট নিরাপদ থাকা উচিত ...
শাদুর

:একটি সংক্ষিপ্তকরণ true। আমি sleepকেবল নীতিমালার বাইরে লম্বা সময় পছন্দ করি ।
nitro2k01

0

আপনি এটিকে ভুল প্রান্ত থেকে সমাধান করার চেষ্টা করছেন। আপনি শেলটি বেরোতে চান না, আপনি পুট্টিটি উইন্ডোটি খোলা রাখতে চান।

http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit - ঠিক কী পরিবর্তন করতে হবে তা বর্ণনা করে। আপনি যদি কেবল "ক্লিন প্রস্থানকরণের" বিকল্পটি ব্যবহার করতে চান exit 1তবে ফোর্সকমন্ডের শেষে যুক্ত করুন ।

সম্পাদনা: আমি ভুল বুঝেছি; আপনি কেবল ফরওয়ার্ড করা পোর্টগুলি বজায় রাখতে চান, আপনি ফোর্সকমন্ডের আউটপুট রাখতে চান না। সেক্ষেত্রে, না http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell তুমি কি চাও?


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