Un transfert `scp` se ferme-t-il lorsque je ferme le shell?
29
J'ai un scptransfert (d'un serveur distant à un autre), c'est assez gros.
Alors peut-être que je veux fermer l'ordinateur à partir duquel j'ai exécuté cette commande, cela mettra-t-il fin au transfert? J'ai sshaccès au shell en utilisant le programme Bitwise.
Contexte du processus scp ( Ctrl+ Z, puis la commande bg.)
Désavoue le processus en arrière-plan ( disown).
Mettez fin à la session ( exit) et le processus continuera de s'exécuter sur la machine distante.
Un inconvénient de cette approche est que les descripteurs de fichiers pour stdout et stderr contiendront toujours des références au tty de votre session ssh. Le terminal peut se bloquer lorsque vous essayez de quitter à cause de cela. Vous pouvez contourner cela en tapant ~.pour forcer la fermeture de votre client ssh (cette séquence d'échappement doit suivre une nouvelle ligne ... voir aussi ~?). Si le processus que vous abandonnez écrit sur stdout ou stderr, le processus peut se terminer prématurément si le tampon tty est trop plein.
Créer une session d'écran et la détacher
L'écran GNU peut être utilisé pour créer une session de terminal distant, qui peut être détachée et continuer à s'exécuter sur le serveur après vous être déconnecté de la session. Vous pouvez ensuite vous reconnecter au serveur à une date ultérieure et vous reconnecter à la session.
Connectez-vous au serveur distant via ssh.
Démarrer une session de l' écran, screen -D -R <session_name>.
Commencez le scptransfert comme d'habitude.
Détachez la session écran avec Ctrl+ Apuis d.
Mettre fin à la session ssh ( exit)
Pour rattacher à la session:
Connectez-vous au serveur distant via ssh.
Rattacher à la session écran, screen -D -R <session_name>
Salut Damien, merci pour la belle variété de réponses et de formatage. Mais je voulais un peu de clarté sur la raison pour laquelle vous avez spécifié le -D -Rdémarrage des drapeaux screen. J'ai lu la page de manuel et cela ne m'a pas aidé à comprendre: -D -R Attach here and now. ...
hello_there_andy
@hello_there_andy Le manuel indique clairement ce que -DR fait. Fondamentalement, si une session Screen est déjà en cours d'exécution, elle s'y rattachera plutôt que de créer une nouvelle session (même si un utilisateur y est connecté via SSH - cela les expulsera, ce qui est utile si l'utilisateur est suspendu en raison à une mauvaise connexion réseau.)
Damien Ó Ceallaigh
1
Notez que la spécification d'un nom de session est facultative.
Damien Ó Ceallaigh
D' accord , je pense que je comprends, mais je suppose que je pensais (peut - être à tort) est ce qui a screen -r <session>fait ... alors le -DRest différent juste -ren ce qu'elle peut les chasser? Non seulement rattacher et échouer si un autre utilisateur est dessus.
hello_there_andy
J'ai fait des tests pour en être certain. -D fait ce que -d fait, sauf qu'il ferme également la connexion SSH (déconnecte l'utilisateur) en plus de détacher toutes les sessions Screen existantes. -r rattache la session. -R rattache une session existante, mais crée une nouvelle session si elle n'existe pas (-r échouerait s'il n'y a pas de session à rattacher.) Donc, j'étais légèrement inexact dans ma description précédente.
Damien Ó Ceallaigh
10
Vous pouvez utiliser nohup(1), par exemple, faire quelque chose comme:
Oui, il sera résilié. La solution pour maintenir la session de terminal en vie sans connectivité est le screenprogramme:
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.
-D -R
démarrage des drapeauxscreen
. J'ai lu la page de manuel et cela ne m'a pas aidé à comprendre:-D -R Attach here and now. ...
screen -r <session>
fait ... alors le-DR
est différent juste-r
en ce qu'elle peut les chasser? Non seulement rattacher et échouer si un autre utilisateur est dessus.Vous pouvez utiliser
nohup(1)
, par exemple, faire quelque chose comme:Cela créera une sortie de
nohup.out
. Ensuite, vous pouvez vous déconnecter en toute sécurité.la source
&
fin a fait la différence pour moi! Merci!Oui, il sera résilié. La solution pour maintenir la session de terminal en vie sans connectivité est le
screen
programme:la source
Comme indiqué ci-dessus, vous pouvez utiliser la commande d'écran, par exemple:
user@server:~$ screen -S bigscptransfer
ser@server:~$ scp bigfile.dat server2:.
[detached from 5899.bigscptransfer]
user@server:~$ screen -r bigscptransfer
la source
nohup scp shinto @ source: / home / data [email protected]: / var / tmp / file
arrêter temporairement la commande avec
mettre en arrière-plan la commande, tapez:
vous pouvez vérifier le processus avec:
la source