जब मैं शेल को बंद करता हूं तो एक 'scp' ट्रांसफर बंद हो जाता है?


29

मेरा scpस्थानांतरण है (एक दूरस्थ सर्वर से दूसरे में), जो काफी बड़ा है।

तो शायद मैं उस कंप्यूटर को बंद करना चाहता हूं जिससे मैंने इस कमांड को निष्पादित किया है, क्या इससे स्थानांतरण समाप्त हो जाएगा? मेरे पास sshबिटवाइज़ प्रोग्राम का उपयोग करके शेल तक पहुंच है।

जवाबों:


34

इसके कई समाधान हैं।

बैकग्राउंड एंड डिसकस प्रोसेस

  1. दूरस्थ सर्वर के लिए ssh टर्मिनल खोलें।
  2. scpहमेशा की तरह स्थानांतरण शुरू करें ।
  3. Scp प्रक्रिया की पृष्ठभूमि ( Ctrl+ Z, फिर कमांड bg)।
  4. बैकग्राउंड प्रोसेस ( disown) डिसाइड करें ।
  5. सत्र को समाप्त करें ( exit) और प्रक्रिया दूरस्थ मशीन पर चलती रहेगी।

इस दृष्टिकोण के लिए एक नुकसान यह है कि stdout और stderr के लिए फ़ाइल डिस्क्रिप्टर में अभी भी आपके ssh सत्र के tty के संदर्भ होंगे। जब आप इस वजह से बाहर निकलने की कोशिश करते हैं तो टर्मिनल लटक सकता है। आप ~.अपने ssh क्लाइंट को बंद करने के लिए टाइप करके इसके चारों ओर काम कर सकते हैं (यह कि भागने के क्रम को एक नई लाइन का पालन करना होगा ... यह भी देखें ~?)। यदि आप जिस प्रक्रिया को छोड़ रहे हैं, वह stdout या stderr को लिखता है, तो समय से पहले बाहर निकल सकता है यदि tty बफर ओवरफिल हो जाता है।

एक स्क्रीन सत्र बनाएँ और इसे अलग करें

जीएनयू स्क्रीन का उपयोग एक दूरस्थ टर्मिनल सत्र बनाने के लिए किया जा सकता है, जिसे सत्र से बाहर करने के बाद आपको अलग किया जा सकता है और सर्वर पर चलता रह सकता है। फिर आप बाद की तारीख में सर्वर में प्रवेश कर सकते हैं और सत्र के लिए रिटैटच कर सकते हैं।

  1. Ssh पर दूरस्थ सर्वर में प्रवेश करें।
  2. , एक स्क्रीन सत्र प्रारंभ screen -D -R <session_name>
  3. scpहमेशा की तरह स्थानांतरण शुरू करें ।
  4. तब Ctrl+ के साथ स्क्रीन सत्र को अलग करें ।Ad
  5. Ssh सत्र समाप्त करें ( exit)

सत्र को फिर से जारी करने के लिए:

  1. Ssh पर दूरस्थ सर्वर में प्रवेश करें।
  2. स्क्रीन सत्र के लिए रीटचैच, screen -D -R <session_name>

बिना Hangups के कमांड चलाएँ

उपयोग करके उत्तर देखें nohup

टास्क शेड्यूलर का उपयोग करें

यह सबसे अच्छा समाधान है यदि यह एक आवधिक प्रकार का कार्य है जिसे आप स्वचालित करना चाहते हैं।

उपयोग crontab, atया batchहस्तांतरण अनुसूची के लिए।


हाय डेमियन, उत्तर की अच्छी विविधता और स्वरूपण के लिए धन्यवाद। लेकिन मैं इस बात पर कुछ स्पष्टता चाहता था कि आपने -D -Rझंडे लगाने की शुरुआत क्यों की screen। मैंने मैन पेज पढ़ा और इससे मुझे समझने में मदद नहीं मिली: -D -R Attach here and now. ...
hello_there_andy

@hello_there_andy मैनुअल बताता है कि -DR स्पष्ट रूप से क्या करता है। मूल रूप से, यदि आपके पास पहले से ही एक स्क्रीन सत्र चल रहा है, तो यह नया सत्र बनाने के बजाय इसे रीटच करेगा (भले ही कोई उपयोगकर्ता SSH के माध्यम से इसमें लॉग इन किया गया हो - यह उन्हें किक आउट कर देगा, जो उपयोगकर्ता के लटकने के कारण उपयोगी है एक खराब नेटवर्क कनेक्शन के लिए।)
डेमियन igh सील्लाइग

1
ध्यान दें कि सत्र नाम निर्दिष्ट करना वैकल्पिक है।
डेमियन la सील्लाइग

ठीक है, मुझे लगता है कि मैं समझता हूं, लेकिन मुझे लगता है कि मैंने सोचा (शायद गलत तरीके से) यही screen -r <session>किया है ... तो क्या यह -DRसिर्फ इतना अलग है -rकि यह आपको बाहर निकाल सकता है? यदि कोई अन्य उपयोगकर्ता इस पर है तो केवल रीटचैट और असफल न हों।
हेल्लो_थेरे_ंडी

मैंने निश्चित होने के लिए कुछ परीक्षण किए। -D क्या करता है -d करता है, सिवाय इसके कि यह SSH कनेक्शन (यूजर को लॉग आउट करना) को बंद कर देगा और इसके अलावा केवल किसी भी स्क्रीन सेशन को अलग करेगा। सत्र rrtaches। -R एक मौजूदा सत्र को फिर से शुरू करता है, लेकिन अगर कोई मौजूद नहीं है तो एक नया सत्र बनाएगा (-r विफल होगा यदि कोई सत्र reattach करने के लिए नहीं है।) इसलिए, मैं अपने पिछले विवरण में थोड़ा गलत था।
डेमियन la सील्लाइग

10

आप उपयोग कर सकते हैं nohup(1), अर्थात, कुछ ऐसा करें:

nohup scp alice@source:/the/answer/of/all bob@target.example.com:/var/tmp/42 &

यह एक आउटपुट बनाएगा nohup.out। तब आप सुरक्षित रूप से लॉगआउट कर सकते हैं।


&अंत में मेरे लिए फर्क पड़ा! धन्यवाद!
winklerrr

6

हां, इसे समाप्त कर दिया जाएगा। कनेक्टिविटी के बिना टर्मिनल सत्र को बनाए रखने का समाधान screenकार्यक्रम है:

SCREEN(1)                                                            SCREEN(1)

NAME
       screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.host]]
       screen -r sessionowner/[[pid.]tty[.host]]

DESCRIPTION
       Screen is a full-screen window manager that multiplexes a physical ter‐
       minal between several processes (typically interactive  shells).   Each
       virtual terminal provides the functions of a DEC VT100 terminal and, in
       addition, several control functions from the ISO 6429  (ECMA  48,  ANSI
       X3.64)  and ISO 2022 standards (e.g. insert/delete line and support for
       multiple character sets).  There is a  scrollback  history  buffer  for
       each virtual terminal and a copy-and-paste mechanism that allows moving
       text regions between windows.

2

जैसा कि ऊपर कहा गया है, आप स्क्रीन कमांड का उपयोग कर सकते हैं, उदाहरण के लिए:

  • स्क्रीन बनाएँ

user@server:~$ screen -S bigscptransfer

  • अब आप स्क्रीन में हैं

ser@server:~$ scp bigfile.dat server2:.

  • CTRL+ Aफिर पुश का उपयोग करके स्क्रीन से अलग करेंD

[detached from 5899.bigscptransfer]

  • जब आपको इसकी आवश्यकता हो तब सत्र फिर से शुरू करें:

user@server:~$ screen -r bigscptransfer


-1

nohup scp shinto @ स्रोत: / होम / डेटा roose@target.example.com: / var / tmp / फ़ाइल

अस्थायी रूप से आदेश के साथ बंद करो

Ctrl + Z

पृष्ठभूमि को कमांड पर रखें, टाइप करें:

bg

यो के साथ प्रक्रिया की जांच कर सकते हैं:

नौकरियों

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.