Restaurer la session tmux après le redémarrage

255

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?

KendallB
la source
1
Vous pouvez hiberner sur le disque comme alternative
Mât Frëëman
36
L'hibernation est une alternative à laisser votre ordinateur en marche, sans redémarrer.
Chepner
5
@chepner: Il y a ces jours où*** System restart required ***
karatedog
2
@ karatedog Oui, nous sommes donc 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:

170

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 créer des scripts pour certaines sessions afin de pouvoir 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 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 exemple très trivial. Vous pouvez créer plusieurs fenêtres, volets et autres avant d’attacher.

Ce ne sera pas 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 réinitialisez ces modifications, celles-ci 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.

Dakatine
la source
1
ne sonne pas comme ça ne fera rien si je veux restaurer une session avec 5 fichiers ouverts. Pas moyen de faire ça?
Chovy
4
Tmux ne sait rien de l'état des processus en cours d'exécution. Vous pouvez créer un script avec les mêmes fichiers ouverts en sélectionnant "vim fichier1 fichier2 fichier3" avec la commande "touches-d'envoi" ou "fenêtre divisée" ou en consultant la gestion de la session de votre éditeur (vim -S, etc.)
bloy
Quel est le but de la tmux send-keys ...ligne?
Dominykas Mostauskis
2
@DominykasMostauskis cette commande envoie les touches pressées à la session spécifiée. C'est comme entrer dans la session et entrer ces mêmes touches depuis le clavier. Dans ce cas, vous envoyez "~ / bin / script" suivi de Entrée.
Dakatine
1
la combinaison some command; if [ $? != 0 ]; then .....est plus facile d'écrire (et lire) comme: if ! some command; then ......
Fonini
117

J'ai écrit un script bash simple qui persiste dans les sessions ouvertes tmux, 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 va écrire à ~/.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.

Mislav
la source
Est-ce seulement si vous avez une session tmux cependant?
Sevenearths
86

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 en arrière-plan automatiques de l'environnement tmux. En option, il restaure également * automatiquement * tmux env après le redémarrage de l'ordinateur.


la source
Tout comme j'ai posté ma "réponse" avec le même lien, j'ai levé les yeux - "do'h!" Vous avez trouvé ceci en essayant de vous rappeler le nom de votre plugin.
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 recommanderais de configurer vos programmes pour la restauration (fichiers .vimrc persistants et positions du curseur pour vim, etc.) et de stocker la commande tmux pane_current_command pour des programmes tels que man pouvant être rouverts. Le point de contrôle est très compliqué à mon avis, mais mérite d'être examiné dans tous les cas.
John P
@ bruno-sutic quelle est la diffrence entre votre plugin (tmux-resurrect) et tmux-coninuum?
Lony
Actuellement , je devais continuum patcher comme celui - ci pour le faire fonctionner github.com/tmux-plugins/tmux-continuum/blob/master/docs/...
rofrol
10

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.

Praveen Kumar
la source
5

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.

greg
la source
17
Pourriez-vous s'il vous plaît poster ce qu'ils disent? Les liens peuvent pourrir.
cpast
1
@cpast: C'est vrai, mais les commentaires peuvent aussi pourrir. Le mieux est de donner les deux :)
danielpops
6
@greg Votre lien retourne 404
rofrol