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基础教程

配置tmux在机器重启后自动恢复tmux工作现场,告别重启恐惧症的更多相关文章

  1. Linux系统下/tmp目录文件重启后自动删除,不重启自动删除10天前的/TMP的文件(转)

    /tmp目录文件重启后自动删除现在知道有ubuntu和solaris系统source:http://blog.chinaunix.net/uid-26212859-id-3567875.html经常会 ...

  2. windows 10 删除库后自动恢复的解决方法

    目录 什么是windows 库? 手动删除不行吗? 如何正确的"删除"? title: windows 10 删除库后自动恢复的解决方法 date: 2019-06-09 15:4 ...

  3. EC2 开启 IPV6 访问 和 禁止重启后自动分配IP地址

    EC2 开启 IPV6 访问 和 禁止重启后自动分配IP地址进入 VPC 控制台,对当前 VPC 添加 IPV6 CIDR 块对该 VPC 的路由表进行修改,添加其它路由,第一个空填::/0,第二个空 ...

  4. Linux--/tmp目录文件重启后自动删除

    源博客 http://blog.itpub.net/24996904/viewspace-769327/ 在/etc/default/目录下有个rcS文件,文件内容如下:## /etc/default ...

  5. Mac突然没有声音但是重启后可以恢复

    命令行操作方式   今天又发现了Mac上的一个BUG,有时候在工作之余我们去吃饭的时候Mac经常会进入睡眠状态,但是有的时候从睡眠状态激活后,本来想听个音乐,但是突然发现音乐不可以用了,以前每次都是重 ...

  6. 配置hooks使svn提交后自动同步客户端代码(客户端与服务端在同一台机器上)

    1.配置svn的hooks 2.实例演示 1.配置svn的hooks 1.1)配置情况 承接上篇svn搭建的文章,今次继续使用上篇文章的配置 上篇文章的地址:linux下搭建svn代码库 svn仓库所 ...

  7. 解决RAID重启后自动更名为md127

    创建完raid后查看/etc/有没有生成mdadm.conf文件 如果没有执行命令:mdadm --detail --scan >> /etc/mdadm.conf 编辑配置文件/etc/ ...

  8. mount --bind 重启后失效的解决办法

    vsftp不支持软链接,可以用mount来支持不同的目录结构 mount --bind /home/www/web/ROOT/img/upload /ftp/private/upload 重启后失效. ...

  9. Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法

    原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他 ...

随机推荐

  1. Docker镜像的构建(五)

    目录 构建镜像 1.使用 commit 命令构建 1.1 运行一个要进行修改的容器 1.2 安装 Apache 软件包 1.3 提交定制容器 2.使用 Dockerfile 构建 2.1 我们的第一个 ...

  2. 修改jira数据库配置

  3. OS填空题练习

    1.操作系统的基本特征:并发性:共享性:虚拟性:异步性. 2.操作系统的设计目标:方便性:有效性:可扩充性:开放性. 3.操作系统的主要功能:处理机管理:存储器管理:设备管理:文件管理:用户接口. 4 ...

  4. with as用法 --Python

    有些任务,可能事先设置,时候做清理工作,如下面一段程序: f = open('tmp.txt') data = f.read() print(data) 是不是忘了什么?没错,很明显忘记关闭文件句柄. ...

  5. mysql数据恢复,binlog详解

    个人博客:mysql数据恢复,binlog详解 binlog日志恢复数据,是挽救错误操作和数据损坏一根救命稻草,所以认识和使用binglog对于技术人员还是很有必要的 binlog一般用于 主从复制 ...

  6. jquery 广告轮播图

    轮播图 /*轮播图基本功能: * 1图片切换 * 1.1图片在中间显示 * 1.2图片淡入淡出 * 2左右各有一个按钮 * 2.1点击左按钮,图片切换上一张 * 2.2点击右按钮,图片切换下一张 * ...

  7. AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks 笔记

    AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks 笔记 这 ...

  8. uboot中打开 debug调试信息的方法

    在uboot目录下include/common.h中, 原理:只需要让 _DEBUG 的值为 1即可. 最简单的做法就是在下图第一行之前添加 #define DEBUG

  9. python处理Excel文件的几个模块

    在python中简单地处理excel文件,有几个相关的模块,各有千秋,本文将不定时收录. Python Excel网站收集了关于python处理excel文件的各种信息. [注意]使用python处理 ...

  10. (二)如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    上一篇我们讲了如何建立一个简单的Roslyn分析项目如分析检查我们的代码. 今天我们主要介绍各个项目中具体的作用以及可视化分析工具. 还是这种截图,可以看到解决方案下一共有三个项目. Analyzer ...