Donc, je courais apt-get upgrade
sur un serveur lorsque le routeur a décidé que cela faisait trop longtemps que cela ne m'avait pas mis en colère: il a abandonné toute connexion. La morale de l'histoire est d'en utiliser screen
beaucoup lorsque vous êtes sur un toupie.
Quoi qu'il en soit, je me suis reconnecté et j'ai découvert dans htop que le processus était toujours suspendu, attendant toujours que mon Y / n soit mis à niveau (je ne l'avais pas encore frappé, heureusement). Existe-t-il un moyen de me rattacher à une session interrompue? J'ai fini par le tuer car ce n'était pas au milieu de la gestion des paquets, mais ce serait génial de le savoir pour référence future.
apt-get
processus soit toujours en cours. Il aurait dû mourir avec toute la chaîne de processus jusqu'à SSH. J'ai remarqué que celado-dist-upgrade
démarre automatiquement dans une sessionscreen
/byobu
: peut-être dans certaines circonstances,apt-get
fait la même chose?Réponses:
La réponse à votre question est: vous ne pouvez pas . Je pense que le principal problème est que les procédures d'authentification seront désynchronisées. Cela ne fonctionne tout simplement pas comme ça.
Comme vous l'avez vous-même remarqué, la solution consiste à utiliser l'écran lorsque cela est possible (au fait, tmux est une alternative à l'écran).
la source
byobu
est unescreen
tmux
Pour exécuter des processus durables, j'utilise screen ou byobu si vous voulez une interface plus conviviale.
Pour l'écran, vous pouvez utiliser:
Cela exécutera [programme] et ses [arguments] dans une session écran . Une fois le programme terminé, la session se ferme automatiquement. Si vous souhaitez conserver la session après l'exécution de votre programme, lancez simplement screen sans aucun argument et une nouvelle invite apparaîtra à l'intérieur de la session. CTRL + A + D détache le terminal de la session en cours.
Pour rattacher à une session précédente:
S'il n'y a qu'une seule session ouverte, elle se reconnectera immédiatement. Si plusieurs sessions sont en cours, il vous demandera à laquelle vous souhaitez vous attacher. Si vous connaissez le nom de la session, vous pouvez simplement l'ajouter comme argument à cette ligne de commande.
Byobu est une belle amélioration. Il est basé sur l' écran , mais fournit une barre en bas qui montre toutes les sessions en cours sous forme d'onglets et donne des raccourcis plus faciles pour les déplacer. Vous pouvez:
MOT DE CONSEIL : évitez de laisser une session ouverte avec la racine utilisateur . Si quelqu'un accède à votre terminal (localement ou à distance), il peut facilement se reconnecter à une session en cours et utiliser votre système en tant que root. Si nécessaire, il est préférable de démarrer une session en utilisant un utilisateur commun et des lignes de commande sudo indivudual si nécessaire.
la source
Bien que vous ne puissiez pas vous rattacher à une session SSH interrompue, vous pouvez réparer le processus en cours d'exécution dans SSH - fonctionnellement équivalent à ce que vous voulez.
Instructions
Dans votre cas, vous reprenez le
apt-get
processus à contrôler depuis une nouvelle session SSH, unescreen
session ou similaire. Mon préféré pour cela est lareptyr
commande:Ensuite, avec le pid que vous avez trouvé pour votre processus:
Ou si cela ne fonctionne pas, essayez:
Après cette étape, toutes vos entrées au clavier vont au programme que vous avez repris. Malheureusement, vous ne verrez pas l'ancienne sortie de la session SSH, telle que la
apt-get
sortie vous demandant une confirmation.Explications
Il existe plusieurs autres outils qui fonctionnent essentiellement de la même manière
reptyr
(c'est-à-dire via uneptrace
pièce jointe de débogage). Voir les questions et réponses suivantes où elles sont discutées:Dans les instructions ci-dessus, la pièce jointe
reptyr 10626
utilise leptrace
débogage tandis que lasudo reptyr -T 10626
commande utilise le vol TTY et est préférable ( détails ).Enfin, la raison pour laquelle vous ne pouvez pas prendre le contrôle d'une session SSH de cette façon est qu'un
sshd
processus n'est pas contrôlé par un terminal hôte, mais qu'il fournit la partie esclave d'un terminal - unpts
périphérique - tandis que la partie maître qui le contrôle réside sur le ordinateur client, ici avec une session SSH en panne entre les deux. Lorsque vous forcez la reprise d'un telsshd
processus avecreptyr -s <pid>
, votre saisie au clavier va à ce processus, pas à son processus enfant actif. Donc, un "Ctrl + Z" va tout simplement tuer celasshd
.la source
Je faisais
do-dist-upgrade
via ssh à partir d'un ordinateur portable qui est entré en suspension, par conséquentBroken pipe
. En rentrant dans la machine, je voyais les processus liés à la mise à niveau toujours en cours d'exécution, parmi lesquels unewhiptail
demande de saisie (quel gestionnaire d'affichage choisir) et, de manière pertinente, un rootSCREEN
. J'ai pu fairesudo su -
etscreen -r
m'attacher à la session et, voilà, j'ai la boîte de dialogue whiptail devant moi en mesure de prendre des informations. J'ai pu reprendre la mise à niveau de manière transparente.Remarque: il s'agissait d'une mise à niveau d'Ubuntu 14.04 vers 16.04.
la source