बंद करें, लेकिन बिल्कुल नहीं।
किसी भी टर्मिनल का स्वतंत्र रूप से
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
आपको सभी फ़ाइल डिस्क्रिप्टर को बंद करने की आवश्यकता है जो ssh सॉकेट से जुड़े हैं, क्योंकि ssh सत्र बंद नहीं होगा जब तक कि कुछ दूरस्थ प्रक्रिया में सॉकेट खुला रहता है। यदि आपको स्क्रिप्ट के आउटपुट में दिलचस्पी नहीं है (संभवत: क्योंकि स्क्रिप्ट ही लॉग फ़ाइल में लिखने का ख्याल रखती है), तो इसे रीडायरेक्ट करें /dev/null
(लेकिन ध्यान दें कि यह त्रुटियों को छिपा देगा जैसे कि स्क्रिप्ट शुरू करने में सक्षम नहीं है)।
उपयोग करने nohup
का यहाँ कोई उपयोगी प्रभाव नहीं है। nohup
यदि प्रोग्राम का कंट्रोलिंग टर्मिनल गायब हो जाता है, तो प्रोग्राम के लिए यह HUP सिग्नल प्राप्त करने के लिए नहीं चलता है, लेकिन यहाँ पहले से कोई टर्मिनल नहीं है, इसलिए नीले रंग से बाहर की प्रक्रिया के लिए कुछ भी नहीं भेजा जा रहा है। इसके अलावा, nohup
मानक आउटपुट और मानक त्रुटि (लेकिन मानक इनपुट नहीं) को एक फ़ाइल पर पुनर्निर्देशित करता है, लेकिन केवल अगर वे एक टर्मिनल से जुड़े हैं, जो फिर से, वे नहीं हैं।
एक टर्मिनल से कोचिंग
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
का प्रयोग करें nohup
अपने नियंत्रण टर्मिनल से स्क्रिप्ट अलग करने इतना है कि यह एक प्राप्त नहीं होता है SIGHUP जब टर्मिनल गायब हो जाता है। nohup
स्क्रिप्ट के मानक आउटपुट और मानक त्रुटि को एक फ़ाइल में रीडायरेक्ट करता है जिसे nohup.out
वे टर्मिनल से जुड़े हुए हैं; आपको स्वयं मानक इनपुट का ध्यान रखना होगा।
रिमोट टर्मिनल रखना
यदि आप कमांड को रिमोट टर्मिनल में रखना चाहते हैं, लेकिन यह SSH सत्र से जुड़ा नहीं है, तो इसे स्क्रीन या Tmux जैसे टर्मिनल मल्टीप्लेक्स में चलाएं ।
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
आप बाद में screen -S backup -rd
उस मशीन पर रूट के रूप में इनवॉइस चलाकर उस टर्मिनल को फिर से कनेक्ट कर सकते हैं ।
एक दूरस्थ कमांड को स्वचालित करना
थोड़ी बेहतर सुरक्षा के लिए, सीधे दूरस्थ रूट लॉगिन को भी व्यापक रूप से न खोलें। एक विशेष-उद्देश्य वाली कुंजी जोड़ी बनाएं और इसे एक मजबूर कमांड दें /root/.ssh/authorized_keys
। सार्वजनिक कुंजी फ़ाइल की सामग्री है AAAA…== wibble@example.com
; उन विकल्पों की अल्पविराम से अलग सूची जोड़ें, command="…"
जिसमें यह निर्दिष्ट किया गया है कि कुंजी का उपयोग केवल इस विशिष्ट कमांड को निष्पादित करने के लिए किया जा सकता है। सभी विकल्पों और कुंजी को एक पंक्ति में रखना सुनिश्चित करें।
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com