zoukankan      html  css  js  c++  java
  • 配置tmux在机器重启后自动恢复tmux工作现场,告别重启恐惧症

    1. 问题出现的背景

    通过ssh远程登录服务器在上面工作,有时候很有可能由于网络断开而导致ssh链接断开,或者下班后想继续在家登录到服务器继续工作。这些情况都需要服务器保持我们的工作环境,比如,vim打开的代码,正在运行的程序等等。

    为了保持远程服务器上的工作现场,我们可以选用screen、tmux来满足这个需求。但是一旦远程服务器由于断电、操作系统异常等原因重启,原先的screen、tmux会话也就没有了。其中运行的一些程序也就不再继续跑了。

    当然,可以把需要跑的程序配置成开机自动运行。但程序print出来的一些状态不能很容易的观察到(当然可以把print信息写入log文件,或者把print信息重定向到文件,这就需要更改程序,也不利于实时观察测试程序)。而其它工作现场比如正在编辑的某个代码文件就不存在了。

    总而言之,自动恢复重启之前的工作现场还是很有必要的。

    2. 配置tmux使其自动保存会话状态

    需要满足的条件:

    • 1 tmux >= 1.9
    • 2 tmux插件管理器: TMP
    • 2 插件: tmux-resurrent

    3 插件:tmux-continuum

    2.1 安装tmux

    sudo apt-get install tmux

    2.2 安装tmux插件管理器和插件

    该部分安装参照其官方网址的说明即可。

    以下是安装好tmux后的配置文件.tmux.conf共参考:

    # set shell
    set -g default-shell /bin/bash
    
    # ------ general ------------------------------------
    set -g prefix2 C-a
    bind C-a send-prefix -2
    
    set -g escape-time 0
    # set -g base-index 0
    set -g renumber-windows on
    # set -g mouse on
    # set -wg pane-base-index 1
    
    # rename-window
    set -wg allow-rename off
    set -wg automatic-rename off
    
    # last-window
    bind a last
    
    # retain current path
    bind c new-window -c "#{pane_current_path}"
    bind % split-window -h -c "#{pane_current_path}"
    bind '"' split-window -c "#{pane_current_path}"
    
    # restart and edit
    bind r source ~/.tmux.conf; display "tmux config sourced"
    bind e neww -n tmux-config "${EDITOR:-vim} ~/.tmux.conf"
    
    # ------ move around --------------------------------
    bind -r h select-pane -L 
    bind -r l select-pane -R
    bind -r j select-pane -D
    bind -r k select-pane -U
    # ------ vi -----------------------------------------
    bind -t vi-copy v begin-selection
    bind -t vi-copy y copy-selection
    
    # ------ status theme -------------------------------
    set -g message-style "bg=#00346e, fg=#ffffd7"        # tomorrow night blue, base3
    
    set -g status-style "bg=#00346e, fg=#ffffd7"   # tomorrow night blue, base3
    set -g status-left "#[bg=#0087ff] ❐ #S "       # blue
    set -g status-left-length 400
    set -g status-right "#{?client_prefix, ⌨ , } #[bg=#0087ff] #(whoami)@#h #[bg=red] %Y-%m-%d %H:%M "
    set -g status-right-length 600
    
    set -wg window-status-format " #I #W "
    set -wg window-status-current-format " #I #W "
    set -wg window-status-separator ""
    set -wg window-status-current-style "bg=red" # red
    set -wg window-status-last-style "fg=red"
    
    set -wg pane-active-border-style "fg=blue"
    set -wg pane-border-style "fg=#585858"       # base01
    
    # automatic restore
    set -g @continuum-restore 'on'
    
    # List of plugins
    set -g @plugin 'tmux-plugins/tpm'
    set -g @plugin 'tmux-plugins/tmux-sensible'
    set -g @plugin 'tmux-plugins/tmux-resurrect'
    set -g @plugin 'tmux-plugins/tmux-continuum'
    
    # Other examples:
    # set -g @plugin 'github_username/plugin_name'
    # set -g @plugin 'git@github.com/user/plugin'
    # set -g @plugin 'git@bitbucket.com/user/plugin'
    run '~/.tmux/plugins/tpm/tpm'

    3. 配置开机恢复保存的tmux会话

    3.1 编写回复tmux的脚本,参考如下例子:

    #!/bin/bash
    # description "Start Tmux"
    
    # Sleep for 5 seconds. If you are starting more than one tmux session
    #   "at the same time", then make sure they all sleep for different periods
    #   or you can experience problems
    /bin/sleep 5
    # Ensure the environment is available
    source /home/ebu/.bashrc
    # Create a new tmux session named newscrawler..
    /usr/bin/tmux new-session -d -s newscrawler
    # ...and control the tmux session (initially ensure the environment
    #   is available, then run commands)
    # /usr/bin/tmux send-keys -t newscrawler:0 "source /home/ebu/.bashrc" C-m
    /bin/sleep 3
    /usr/bin/tmux send-keys -t newscrawler:0 "python ant_client.py" C-m
    /bin/sleep 3
    /usr/bin/tmux send-keys -t newscrawler:1 "python ant_client.py" C-m
    /bin/sleep 3
    /usr/bin/tmux send-keys -t newscrawler:3 "top" C-m

    以上脚本需要注意的几点:

    • 1 创建的新tmux会话newscrawler的相关信息已经被tmux-resurrect保存在了~/.tmux/resurrect/last文件里面
    • 2 在新session的不同窗口里面分别运行程序之前,最好要先sleep几秒钟,不然你的程序很可能运行失败。

    3.2 配置开机运行上述脚本

    3.2.1 可以写入/etc/rc.local文件里面:

    # By default this script does nothing.
    /home/veelion/reboot-tmux-ant_client.sh
    exit 0

    3.2.2 也可以配置到crontab里面:

    # start crawler at reboot
    @reboot /home/ebu/reboot-tmux-ant_client.sh

    python学习笔记整理于猿人学网站的python基础教程

  • 相关阅读:
    centos 安装python3.6 简易安装过程
    包装类型
    剑指offer二叉树中和为某一值的路径
    剑指offer 捡绳子
    按位与的技巧
    SpringBoot 登录拦截功能的实现
    AIO实现简单http服务器
    真题-数的分解
    重建二叉树
    旋转数组的最小数字
  • 原文地址:https://www.cnblogs.com/amiza/p/10470399.html
Copyright © 2011-2022 走看看