418

Is there any way to save a tmux session? In other words, if I reboot the computer, will I always lose the sessions?

6 Answers 6

246

Yes, if you reboot you computer you will lose the sessions. Sessions cannot be saved. But, they can be scripted. What most do in fact is to script some sessions so that you can re-create them. For instance, here's a trivial shell script to create a 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

Here's what it does. First, it checks if there's any session already with that name (in this case, the very original name is "script") with tmux has-session. It checks the return code. If there's a ongoing session with that name already, it skips the "if" cycle and go straight to the last line, where it attaches to the session. Otherwise, it creates a session and sends some keys to it (just running a random script for now). Then it exits the "if" block and attaches.

This is a very trivial sample. You can create multiple windows, panes, and the like before you attach.

This will not be the very same thing you asked for, though. If you do any changes to the session, for instance you rename a window and create a new pane in it, if you reboot those changes won't of course be saved.

There are some tools that ease the process of scripting sessions, although I prefer to do things manually (I think it is more versatile). Those tools are Tmuxinator and Teamocil.

My main source of informations was "The Pragmatic Bookshelf" Tmux book.

6
  • 2
    doesn't sound like that will do anything if I want to restore a session with 5 files open. No way to do that?
    – chovy
    Commented Jan 25, 2013 at 1:38
  • 7
    Tmux doesn't know anything about the state of processes you may have had running. You could script having the same files open by having the 'send-keys' or 'split-window' command be 'vim file1 file2 file3' or look into your editor's session management (vim -S and the like)
    – bloy
    Commented Feb 2, 2013 at 14:44
  • What is the purpose of the tmux send-keys ... line? Commented Apr 15, 2014 at 13:38
  • 3
    @DominykasMostauskis that command sends key presses to the specified session. It's like entering the session, and inputing those very keys from the keyboard. In this case, you send "~/bin/script" followed by Enter.
    – Dakatine
    Commented Apr 16, 2014 at 15:47
  • can I have the script do ssh login with username and pass? (I know its not secured just want to know if its possible for systems where i don't care about seurity but still have to have user and pass).
    – Jas
    Commented Aug 11, 2016 at 5:12
180

I wrote a simple bash script that persists open tmux sessions, windows and current working directories in each.

Call it like so manually or periodically from cron (because you might forget):

tmux-session save

It will write to ~/.tmux-session. Restore them after reboot like so:

tmux-session restore

I find this much better than a several hundred line long Perl script.

8
  • Is this only if you have one tmux session though? Commented May 17, 2019 at 9:36
  • 2
    This works for mutltiple tmux sessions, but it does not save panes within each window. Commented Dec 5, 2019 at 17:46
  • 1
    Your tmux-session script is now in my dotfiles project. Thanks! github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles Commented Mar 22, 2020 at 6:48
  • many thanks for the script @mislav. I saved the script as .zsh and ran ~/.tmux-session.zsh save in the terminal without errors. Then restarted the computer and then open tmux interminal and ran ~/.tmux-session.zsh restore and got width invalid as a message (with one additional window created in main directory. But the saved session (with 3 windows and 2 panes in each) was not reloaded. Do you have an idea of what could have gone wrong?
    – ecjb
    Commented Aug 10, 2020 at 12:01
  • 1
    @mislav you've had a TODO in that file since 2013. May I recommend todoist.com
    – abbood
    Commented May 14, 2022 at 5:51
151

I wrote a tmux plugin that enables you to save complete tmux environment and restore it later. It strives to be really detailed so that you have a feeling you never quit tmux.

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

Update: now there's a tmux-continuum plugin that performs automatic background saves of tmux environment. Optionally it also *automatically* restores tmux env after computer reboot.

7
  • This plugin is not bad, but it did not restore all my programs. Will read more of your docs and maybe submit an issue on github.
    – Arne
    Commented Jul 31, 2016 at 12:05
  • @Arne Depending on the program, this may require program checkpointing. Instead, I would recommend configuring your programs to restore - persistent .vimrc files and cursor positions for vim, etc. - and storing the tmux pane_current_command for programs like man that can be re-opened. Checkpointing is very complicated in my opinion, but worth looking into in any case.
    – John P
    Commented Apr 3, 2017 at 1:52
  • 4
    @bruno-sutic whats the diffrence between your plugin (tmux-resurrect) and tmux-coninuum?
    – lony
    Commented Aug 22, 2017 at 7:38
  • Currently I needed to patch continuum like this to make it work github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
    – rofrol
    Commented Dec 21, 2018 at 9:51
  • I had some problems with bash commands history reloading (when using set -g @resurrect-save-shell-history 'on') and generally with history persistence when switching among terminals in tmux. See this thread and especially its 5th comment to see a workaround (or hack) I successfully used to overcome this problem Commented Apr 10, 2019 at 7:26
12

tmuxinator is a tool written in Ruby, that could be used to create and manage tmux sessions with ease. It could be used to create a project, which could later be instantiated as as tmux session.

5

Consider this partial solution found here

The author creates a function that saves the history of the tmux session in order to persist the state of the tmux session post a server reboot.

4
  • 27
    Could you please post what they say? Links can rot.
    – cpast
    Commented Feb 2, 2013 at 22:30
  • 1
    @cpast: This is true, but comments can also rot. Best to give both :)
    – danielpops
    Commented Apr 21, 2016 at 16:44
  • 7
    @greg Your link returns 404
    – rofrol
    Commented Dec 21, 2018 at 9:50
  • 2
    Here's a related github link from that author: github.com/edsantiago/tmux-session
    – zeroimpl
    Commented Jun 6, 2020 at 2:06
4

I successfully use https://github.com/jimeh/tmuxifier for recreating sessions. This can be installed without ruby, just using git.

Samples are pretty self explanatory, e.g.: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .