Question Restaurer la session tmux après le redémarrage


Est-il possible de sauvegarder une session tmux? En d'autres termes, si je redémarre l'ordinateur, vais-je toujours perdre les sessions?


214
2018-06-21 04:17


origine


Vous pouvez hiberner sur le disque comme alternative - Mâtt Frëëman
La mise en veille prolongée est une alternative à laisser votre ordinateur tourner constamment, sans redémarrer. - chepner
@chepner: Il y a ces jours où *** System restart required *** - karatedog
@karatedog Oui, nous sommes tous deux d'accord pour dire que l'hibernation n'est pas une solution pour perdre votre session tmux au redémarrage. - chepner


Réponses:


Oui, si vous redémarrez votre ordinateur, vous perdrez les sessions. Les sessions ne peuvent pas être enregistrées. Mais, ils peuvent être scriptés. Ce qui fait le plus est de scénario certaines sessions pour que vous puissiez les recréer. Par exemple, voici un script shell trivial pour créer une session:

#!/bin/zsh                                                                                                   

SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null

if [ $? != 0 ] 
 then
    tmux new-session -s $SESSIONNAME -n script -d
    tmux send-keys -t $SESSIONNAME "~/bin/script" C-m 
fi

tmux attach -t $SESSIONNAME

Voici ce que ça fait. Tout d'abord, il vérifie s'il y a déjà une session avec ce nom (dans ce cas, le nom très original est "script") avec tmux has-session. Il vérifie le code retour. S'il existe déjà une session avec ce nom, il ignore le cycle "if" et passe directement à la dernière ligne, où il se connecte à la session. Sinon, il crée une session et lui envoie des clés (il suffit de lancer un script aléatoire pour le moment). Ensuite, il quitte le bloc "si" et se connecte.

C'est un très échantillon trivial. Vous pouvez créer plusieurs fenêtres, volets et autres avant de vous connecter.

Cette volonté ne pas être la même chose que vous avez demandé, cependant. Si vous apportez des modifications à la session, par exemple si vous renommez une fenêtre et créez un nouveau volet, si vous redémarrez ces modifications, celles-ci ne seront évidemment pas enregistrées.

Certains outils facilitent le processus des sessions de script, bien que je préfère faire les choses manuellement (je pense que c'est plus polyvalent). Ces outils sont Tmuxinator et Teamocil.

Ma principale source d'informations était "Le livre Pragmatic Bookshelf".


140
2018-06-22 08:58



ne sonne pas comme cela fera n'importe quoi si je veux restaurer une session avec 5 fichiers ouverts. Pas moyen de faire ça? - chovy
Tmux ne sait rien de l'état des processus en cours d'exécution. Vous pourriez écrire avec le même les fichiers s'ouvrent avec la commande 'send-keys' ou 'split-window' soit 'vim file1 file2 file3' ou consultez la gestion de session de votre éditeur (vim -S et autres) - bloy
Quel est le but du tmux send-keys ... ligne? - Dominykas Mostauskis
@DominykasMostauskis cette commande envoie touche appuie sur la session spécifiée. C'est comme entrer dans la session et saisir ces touches du clavier. Dans ce cas, vous envoyez "~ / bin / script" suivi de la touche Entrée. - Dakatine
puis-je avoir le script ssh avec identifiant et passe? (Je sais que ce n'est pas sécurisé, je veux juste savoir si c'est possible pour les systèmes où je ne me soucie pas de la seurité mais qui doit toujours avoir un utilisateur et passer). - Jas


J'ai écrit un script bash simple qui persiste à ouvrir les sessions tmux, les fenêtres et les répertoires de travail actuels dans chacun.

Appelez-le comme si manuellement ou périodiquement à partir de cron (car vous pourriez oublier):

tmux-session save

Il écrira à ~/.tmux-session. Restaurez-les après le redémarrage comme suit:

tmux-session restore

Je trouve cela bien mieux qu'un script Perl de plusieurs centaines de lignes.


100
2017-07-04 22:37





J'ai écrit un plugin tmux qui vous permet de sauvegarder l’environnement tmux complet et de le restaurer plus tard. Il s'efforce d'être vraiment détaillé pour que vous ayez le sentiment de ne jamais quitter tmux.

https://github.com/tmux-plugins/tmux-resurrect

Mise à jour: maintenant il y a un tmux-continuum plugin qui effectue des sauvegardes d'arrière-plan automatique de l'environnement tmux. En option, il restaure automatiquement * tmux env après le redémarrage de l'ordinateur.


66
2017-08-30 09:16



Juste au moment où j'ai posté ma "réponse" avec le même lien, j'ai levé les yeux - "do'h!" Vous l'avez trouvé en essayant de vous rappeler de quoi votre plugin a été appelé. - phatskat
Ce plugin n'est pas mauvais, mais il n'a pas restauré tous mes programmes. Va lire plus de vos documents et peut-être soumettre un problème sur github. - Arne
@Arne Selon le programme, cela peut nécessiter un point de contrôle du programme. Au lieu de cela, je vous recommande de configurer vos programmes pour restaurer - les fichiers .vimrc persistants et les positions du curseur pour vim, etc. À mon avis, le point de contrôle est très compliqué, mais cela vaut la peine d’être examiné dans tous les cas. - John P
@ bruno-sutic quelle est la différence entre votre plugin (tmux-resurrect) et tmux-coninuum? - lony


tmuxinator est un outil écrit en Ruby, qui pourrait être utilisé pour créer et gérer facilement des sessions tmux. Il pourrait être utilisé pour créer un projet, qui pourrait ensuite être instancié comme une session tmux.


10
2018-06-26 17:40





Considérez cette solution partielle trouvée ici

L'auteur crée une fonction qui enregistre l'historique de la session tmux afin de conserver l'état de la session tmux après le redémarrage du serveur.


5
2018-02-02 21:54



Pourriez-vous s'il vous plaît poster ce qu'ils disent? Les liens peuvent pourrir. - cpast
@cpast: C'est vrai, mais les commentaires peuvent aussi pourrir. Mieux vaut donner les deux :) - danielpops