系统重启,tmux会话就会丢失,需要重开tmux,不爽,于是去问Google大神怎么办,得到一个手动保存和恢复的方法。源于:http://superuser.com/a/615716
该方法作者在他的github库中提供了很多脚本,我只取相关的tmux-seesion脚本拿来用用,具体使用方法如下:
1、设立一个用户专用的命令目录,比如我的是 /Users/cssor/bin,将该目录加入系统环境变量,并设置可执行权限
#将下面的语句加入到 ~/.bash_profile (使用zsh的,则为 ~/.zshrc)export PATH=$PATH:/Users/cssor/bin
#设置可执行权限chmod -R +x /User/cssor/bin
2、保存脚本到该目录,文件名为 tmux-session,完整路径为 /Users/cssor/bin/tmux-session。脚本内容如下
#!/usr/bin/env bash# Save and restore the state of tmux sessions and windows.# TODO: persist and restore the state & position of panes.set -edump() { local d=$'\t' tmux list-windows -a -F "#S${d}#W${d}#{pane_current_path}"}save() { dump > ~/.tmux-session}terminal_size() { stty size 2>/dev/null | awk '{ printf "-x%d -y%d", $2, $1 }'}session_exists() { tmux has-session -t "$1" 2>/dev/null}add_window() { tmux new-window -d -t "$1:" -n "$2" -c "$3"}new_session() { cd "$3" && tmux new-session -d -s "$1" -n "$2" $4}restore() { tmux start-server local count=0 local dimensions="$(terminal_size)" while IFS=$'\t' read session_name window_name dir; do if [[ -d "$dir" && $window_name != "log" && $window_name != "man" ]]; then if session_exists "$session_name"; then add_window "$session_name" "$window_name" "$dir" else new_session "$session_name" "$window_name" "$dir" "$dimensions" count=$(( count + 1 )) fi fi done &2 exit 1esac
原链接获取:https://github.com/mislav/dotfiles/blob/d2af5900fce38238d1202aa43e7332b20add6205/bin/tmux-session
3、保存和恢复会话的使用方式:
#会话信息会保存到 ~/.tmux-session#手动保存可能会遗忘,可以加入cron定时任务自动保存tmux-session save#系统重启后,恢复:tmux-session restore
4、设置定时任务自动保存会话信息
#编辑定时任务crontab -e
在打开的编辑器(一般是vim)中,输入:
#表示每59分钟执行一次,可按自己的习惯改为 0-59 之间的数字,更多用法需自行学习crontab59 * * * * tmux-session save
保存后退出,看见 crontab: installing new crontab 即表示成功。我使用的时候,默认编辑器是vi,返回错误: crontab: “/usr/bin/vi” exited with status 1.这是据说因为vi编辑的不行,vim却可以(==! 一群乌鸦从脑袋上飞过~)。执行 export EDITOR=vim 可以修正这个问题,或尝试 export EDITOR=nano.查看成功的任务: crontab -l
资料: 关于crontab
原文地址:Mac osx保存和恢复tmux会话, 感谢原作者分享。 也就越容易失败,还不如怀揣一颗平常心,“但行好事,莫问前程”,往往成功的几率反而更大些