web-dev-qa-db-fra.com

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, est-ce que je perdrai toujours les sessions?

246
KendallB

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 que la plupart des gens font en réalité est de script certaines sessions pour pouvoir les recréer. Par exemple, voici un script shell simple 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 existe déjà une session portant ce nom (dans ce cas, le nom très original est "script") avec tmux has-session. Il vérifie le code de retour. Si une session portant ce nom est déjà en cours, le cycle "if" est ignoré et passe directement à la dernière ligne, où il est associé à la session. Sinon, il crée une session et lui envoie des clés (en exécutant simplement un script aléatoire pour le moment). Ensuite, il quitte le bloc "if" et se joint.

Ceci est un très échantillon trivial. Vous pouvez créer plusieurs fenêtres, volets et autres avant d’attacher.

Ce sera pas exactement ce que vous avez demandé. 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 ne seront bien sûr pas enregistrées.

Certains outils facilitent le processus de création de scripts, bien que je préfère effectuer les tâches manuellement (je pense que c'est plus polyvalent). Ces outils sont Tmuxinator et Teamocil .

Ma principale source d'informations était "Le livre pragmatique" de Tmux.

162
Dakatine

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

Appelez-le comme si 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 beaucoup mieux qu’un script Perl de plusieurs centaines de lignes.

114
mislav

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é afin que vous ayez l’impression de ne jamais quitter tmux.

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

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

83
user124460

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é sous forme de session tmux.

10
Praveen Kumar

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 un redémarrage du serveur.

5
greg