क्या लिनक्स में एक कमांड है जो तब तक इंतजार करता है जब तक इसे समाप्त नहीं किया जाएगा?


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 के साथ समाप्त नहीं करता है या पुथ विंडो को बंद करके SSH कनेक्शन को बंद नहीं करता है?

मुझे इसके लिए क्या उपयोग करना चाहिए waitTillControlC?


मुझे Superuser.com/questions/587629/… जैसे सवाल मिले , लेकिन वे उपयोगकर्ता को एक तैयार शेल के साथ छोड़ देंगे।
स्टुक्नेट

जवाबों:


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

यह सीपीयू शक्ति की किसी भी (ध्यान देने योग्य) मात्रा का उपभोग किए बिना हमेशा के लिए सोना चाहिए।

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
स्टुक्सनेट

tail -f /dev/nullतकनीकी रूप से 9999 लूप से भी बदतर है। यह प्रक्रिया हर 2 घंटे और 56 मिनट के बजाय हर सेकंड उठेगी।
जुलियाग्रे

मैंने इसे यहां पाया: unix.stackexchange.com/questions/42901/… (उस व्यक्ति का उत्तर देने वाला व्यक्ति दावा करता है कि "(इस का उपयोग आंतरिक रूप से उपयोग करता है, कोई मतदान या जागरण नहीं होना चाहिए, इसलिए देखने के अलावा, यह पर्याप्त होना चाहिए) "क्या यह कथन या यह धारणा कि पूंछ inotifyगलत का उपयोग करती है?"
नाइट्रो 2k01

धारणा सही है, उपलब्ध होने tailपर उत्तोलन के लिए अनुकूलित inotifyहै। यह सबसे हाल ही में सबसे अधिक वितरण के साथ नहीं तो डिफ़ॉल्ट मामला होना चाहिए। हालाँकि, मैंने अभी एक लिनक्स लैपटॉप पर परीक्षण किया और tailनिगरानी के साथ सहज गतिविधि देखी, /dev/nullइसलिए यह निश्चित रूप से बदतर है कि घड़ी चक्रों की अवधि में नींद आती है।
jlliagre

मुझे विश्वास नहीं है कि tailहमेशा हर सेकंड जागता रहेगा। परिणाम का एक संभावित कारण यह है कि आप इसे एक टर्मिनल में चला रहे हैं tailजो कि किसी भी कारण से संचार कर सकता है , जबकि sleepऐसा नहीं होगा। ऐसा कोई कारण नहीं है कि केवल निगरानी के कारण हीtail जागना चाहिए । /dev/null
नाइट्रो 2k01

0

आप बस निम्नलिखित की कोशिश कर सकते हैं:

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

1
भविष्य के आगंतुकों के लिए, आपको यह कैसे काम करता है, इसका सारांश प्रदान करना चाहिए। कई लोगों को पता हो सकता है, लेकिन आप यह नहीं मान सकते हैं।
nddwaller

sleepसीपीयू पर लंबी अवधि आसान हो जाएगी, हालांकि sleep 1पिछले दो दशकों में बनी किसी भी चीज पर सुरक्षित होना चाहिए ...
शादुर

:के लिए एक आशुलिपि है true। मैं भी sleepसिद्धांत से बाहर एक लंबी अवधि पसंद करेंगे ।
नाइट्रो 2k01

0

आप इसे गलत अंत से हल करने का प्रयास कर रहे हैं। आप खोल को बाहर नहीं करना चाहते हैं, आप पोटीन को खिड़की को खुला छोड़ना चाहते हैं।

http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit - ठीक वही वर्णन करता है जिसे आपको बदलने की आवश्यकता है। यदि आप "केवल स्वच्छ निकास पर" विकल्प का उपयोग करना चाहते हैं, exit 1तो ForceCommand के अंत में जोड़ें ।

संपादित करें: मुझे गलत समझा गया; आप केवल अग्रेषित पोर्ट को बनाए रखना चाहते हैं, आप ForceCommand का आउटपुट नहीं रखना चाहते हैं। उस स्थिति में, http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell क्या आप नहीं चाहते हैं?


मुद्दा यह नहीं है कि खिड़की बंद हो जाती है बल्कि ssh सुरंग बंद हो जाती है। क्या पुत्तर को खिड़की खुली छोड़ देने से एसएचएस सुरंग भी बनी रहती है?
एड्रियन प्रैंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.