Restaurer la session tmux après le redémarrage
Y a-t-il un moyen de sauver une session tmux ? En d'autres termes, si je redémarre l'ordinateur, vais-je toujours perdre les sessions ?
Y a-t-il un moyen de sauver une session tmux ? En d'autres termes, si je redémarre l'ordinateur, vais-je toujours perdre les sessions ?
Oui, si vous redémarrez votre ordinateur, vous perdrez les sessions. Les sessions ne peuvent pas être sauvegardées. Mais elles peuvent être programmées. En fait, la plupart d'entre eux se contentent de scripter 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 qu'il fait. Tout d'abord, il vérifie s'il y a 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. S'il y a déjà une session en cours avec ce nom, il saute le cycle “si” et va directement à la dernière ligne, où il s'attache à la session. Sinon, il crée une session et lui envoie quelques clés (en exécutant un script aléatoire pour l'instant). Ensuite, il quitte le bloc “if” et se joint à la session.
C'est un échantillon très trivial. Vous pouvez créer plusieurs fenêtres, volets, etc. avant de les joindre.
Mais ce ne sera pas exactement ce que vous avez demandé. Si vous apportez des modifications à la session, par exemple si vous renommez une fenêtre et y créez un nouveau volet, si vous redémarrez, ces modifications ne seront bien sûr pas enregistrées.
Il existe des outils qui facilitent le processus de scripting des sessions, 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'information était le livre Tmux “The Pragmatic Bookshelf”.
J'ai écrit un simple script bash qui persiste à ouvrir les sessions tmux, les fenêtres et les répertoires de travail actuels dans chacune d'elles.
Appelez le comme ça manuellement ou périodiquement depuis le cron (parce que vous pourriez oublier) :
tmux-session save
Il écrira à ~/.tmux-session
. Restaurez-les après le redémarrage comme ceci :
tmux-session restore
Je trouve cela bien mieux qu'un script Perl de plusieurs centaines de lignes.
tmuxinator est un outil écrit en Ruby, qui pourrait ê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.
J'utilise avec succès https://github.com/jimeh/tmuxifier pour recréer des sessions. Cela peut être installé sans ruby, en utilisant simplement git.
Les exemples sont assez explicites, par exemple https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh