424 votes

Restaurer la session tmux après un redémarrage

Existe-t-il un moyen de sauvegarder une session tmux ? En d'autres termes, si je redémarre l'ordinateur, est-ce que je perdrai toujours les sessions ?

246voto

Dakatine Points 2560

Oui, si vous redémarrez votre ordinateur, vous perdrez les sessions. Les sessions ne peuvent pas être sauvegardées. Mais, elles peuvent être scénarisées. Ce que la plupart font en fait est de script certaines sessions afin de pouvoir les recréer. Par exemple, voici un Shell 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 qu'il fait. Tout d'abord, elle vérifie s'il existe déjà une session portant ce nom (dans ce cas, le nom original est "script") à l'aide de la commande tmux has-session . Il vérifie le code de retour. S'il existe déjà une session en cours avec ce nom, il saute le cycle "if" et va directement à la dernière ligne, où il s'attache à la session. Sinon, il crée une session et lui envoie des clés (en exécutant un script aléatoire pour le moment). Ensuite, il sort du bloc "if" et s'attache.

Il s'agit d'un muy un échantillon trivial. Vous pouvez créer plusieurs fenêtres, volets, etc. avant de les joindre.

Cela permettra no être la même chose que ce que vous avez demandé, cependant. Si vous apportez des modifications à la session, par exemple si vous renommez une fenêtre et y créez un nouveau volet, ces modifications ne seront pas sauvegardées si vous redémarrez.

Il existe des outils qui facilitent le processus de création de scripts pour les sessions, mais je préfère faire les choses manuellement (je pense que c'est plus polyvalent). Ces outils sont Tmuxinator y Teamocil .

Ma principale source d'informations était le livre Tmux de "The Pragmatic Bookshelf".

0 votes

@jas j'utilise uniquement des paires de clés (connexion sans mot de passe) et je mets un alias comme ceci dans mon .b alias sshlocal='ssh myname@localhost -t "tmux new-session -A -s main"'

181voto

mislav Points 1990

J'ai écrit un simple bash script qui persiste les sessions tmux ouvertes, Windows et les répertoires de travail actuels dans chacune.

Appelez-le ainsi manuellement ou périodiquement depuis 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.

0 votes

Est-ce que c'est seulement si vous avez une session tmux ?

2 votes

Cela fonctionne pour plusieurs sessions tmux, mais ne permet pas de sauvegarder les volets dans chaque fenêtre.

1 votes

Votre tmux-session script est maintenant dans mon projet dotfiles. Merci ! github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

153voto

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

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

Mise à jour : maintenant il y a un tmux-continuum plugin qui effectue des sauvegardes automatiques de l'environnement tmux. Optionnellement, il restaure aussi *automatiquement* l'environnement tmux après le redémarrage de l'ordinateur.

0 votes

Ce plugin n'est pas mauvais, mais il n'a pas restauré tous mes programmes. Je vais lire davantage votre documentation et peut-être soumettre un problème sur github.

0 votes

Selon le programme, cela peut nécessiter un point de contrôle du programme. Je recommanderais plutôt de configurer vos programmes pour qu'ils soient restaurés - fichiers .vimrc persistants et positions du curseur pour vim, etc. - et de stocker la commande tmux pane_current_command pour les programmes comme man qui peuvent être réouverts. Le checkpointing est très compliqué à mon avis, mais cela vaut la peine de s'y intéresser dans tous les cas.

4 votes

@bruno-sutic quelle est la différence entre votre plugin (tmux-resurrect) et tmux-coninuum ?

12voto

Praveen Kumar Points 321

tmuxinator est un outil écrit en Ruby, qui peut être utilisé pour créer et gérer des sessions tmux avec facilité. Il peut être utilisé pour créer un projet, qui peut ensuite être instancié en tant que session tmux.

5voto

greg Points 59

Considérons cette solution partielle trouvée aquí

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

27 votes

Pourriez-vous afficher ce qu'ils disent ? Les liens peuvent pourrir.

1 votes

@cpast : C'est vrai, mais les commentaires peuvent aussi pourrir. Le mieux est de donner les deux :)

7 votes

@greg Votre lien renvoie à 404

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X