资讯专栏INFORMATION COLUMN

黑屏操作利器,多屏批量shell命令发送

StonePanda / 2429人阅读

摘要:开发在日常环境上测试的成功都依赖这个应用提供的服务,但频繁的发布造成短暂中断会阻塞流程。为了不让单点集成机阻塞,考虑设置两台日常机器按正式分批发布形式保证日常环境每时每刻必会有一台机器在提供服务。

web系统常见的开发流程:

日常->预发->线上

日常上通常只有一台机器用来集成,所有人的开发分支会在这上面做合并部署。

当一个应用有很多人在上面开发,并被很多应用依赖时,会有个问题。开发在日常环境UI上测试的成功都依赖这个应用提供的服务,但频繁的发布造成短暂中断会阻塞流程。

为了不让单点集成机阻塞,考虑设置两台日常机器按正式分批发布形式保证日常环境每时每刻必会有一台机器在提供服务。这样的解决方式有个问题,原来debug看日志只需要关心一台机,登上去就好,现在变成了两台机。

app-|--> vm No.1 -> log
    --> vm No.2 -> log

这个问题还会继续膨胀,如果是单元化应用,单元也会有机器,按照以上方式又要乘2, 那么就变成了共4台,看到了吗?这时就头痛了,一条UI上测试的点击,到底会落在哪台机器呢?

app -  |-中心-| --> vm No.1 -> log
       |      --> vm No.2 -> log
       |-单元-| --> vm No.3 -> log
              --> vm No.4 -> log   

我们先想个简单的方式解决这个问题,tmux作为一款linux的多屏工具,最早见到这款工具还是在一位用HHKB的哥们那。

tmux基本概念

以下引用http://cenalulu.github.io/lin... 上的图:

session: 会话,我们可以把一组逻辑上上要做的事定义为一个会话,比如这次会话我们是要做一个应用的日常开发。

window: 窗口,就是我们屏上看到的控制台界面,可以跟iTerm2上一样,有多个tab页,实际概念上也可以直接理解为tab页。

panel:一个大窗口上,为了能直接看到多个登录机器的情况,可以切分这个窗口,

常用快捷键
ctrl+b, %  垂直切割屏幕(window)
ctrl+b, "  水平切割屏幕(window)
切换窗口
ctrl+b + 窗口号
ctrl+b + n 换到下一个窗口
ctrl+b + p 换到前一个窗口
切换panel
ctrl+b + 上下左右, 移动到想要的panel上
调整panel大小
ctrl+b alt+ 左或右调整垂直panel大小
ctrl+b alt+ 上或下调整水平panel大小

下图,将右边的panle调大了

翻页

tmux不是一个原生GUI支持的,所以我们没法用iterm2里面的鼠标翻页来进行操作,翻页操作更像vi里面的纯键盘操作。

ctrl+b, [  切换到复制模式。然后用ctrl+b后退,  ctrl+f 前进 来翻页。
看多机器shell屏幕大招,发送命令到多个panel
ctrl+b, :setw synchronize-panes

这个是今天的重点,前面说过了,如果需要登录的日常机器扩展到4台怎么办?

想象下,我们计划连4台机,这个可以用切割window得到多个panel解决,而我们的目的是看日志,这个操作在每台机是一模一样的:

cd xxx/xxx/xxx
tail -f xxx.log

那么有没有一种方式能把我们打的命令同步发送到所有的panel(所有登录的机器上)呢?

当然有,通过设置一个模式解决。

ctrl+b, :setw synchronize-panes

设置成功后,在一个panel内打字,会同步到所有panel上,如下,我只在一个panel里面输入了test。

想解除怎么办? 同样的命令(synchronize-panes)再输入一次就解除这种模式。

tmux的一些缺省配置功能可以配置在文件里,路径是:
~/.tmux.conf

share一下我目前在用的:

set-option -g default-shell /bin/zsh
setw -g mode-keys vi
set-option -g default-command "reattach-to-user-namespace -l zsh"
set-window-option -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

# Setup "v" to begin selection as in Vim
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

# bind a reload key
bind R source-file ~/.tmux.conf ; display-message "Config reloaded.."

本文来自微信公众号「麦芽面包,id「darkjune_think」
转载请注明。
微信扫一扫关注公众号。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10051.html

相关文章

  • 运维利器rshell,功能强大似Ansible/Puppet/Chef,配置简单如Putty!

    摘要:运维利器,功能强大似,配置简单如多主机远程批量执行命令和上传下载文件跨平台,无依赖,免安装源码获取,,喜欢请加星,多谢。 运维利器rshell,功能强大似Ansible/Puppet/Chef,配置简单如Putty! rshell:多Linux主机远程批量执行Shell命令和上传下载文件(跨平台,无依赖,免安装) 源码获取,https://github.com/luckywinds/r...

    curried 评论0 收藏0
  • SegmentFault 技术周刊 Vol.37 - 分布式缓存利器:Redis

    摘要:持久化到中反向代理的负载均衡基于的集群搭建如何实现从中订阅消息转发到客户端的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。 showImg(https://segmentfault.com/img/bVYE6k?w=900&h=385); Redis 是由意大利程序员 Salvatore Sanfilippo(昵称:a...

    kuangcaibao 评论0 收藏0
  • SegmentFault 技术周刊 Vol.37 - 分布式缓存利器:Redis

    摘要:持久化到中反向代理的负载均衡基于的集群搭建如何实现从中订阅消息转发到客户端的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。 showImg(https://segmentfault.com/img/bVYE6k?w=900&h=385); Redis 是由意大利程序员 Salvatore Sanfilippo(昵称:a...

    binaryTree 评论0 收藏0
  • 2016年云巴产品更新合集

    摘要:实时弹幕使用云巴,直播平台可快速实现视频直播中发送弹幕打赏点赞等实时互动功能。云巴聊天室支持图片上传文件发送文档评论系统正式上线新增搜索功能,我们会做得更好。 SDK 篇 Android SDK 更新 Release 1.6.3后台进程相互拉起的特殊版本 Release 1.6.4增加 so 文件 Release 1.8.0支持小米、华为推送,无需注册第三方账号 Release 1....

    CoffeX 评论0 收藏0
  • 2016年云巴产品更新合集

    摘要:实时弹幕使用云巴,直播平台可快速实现视频直播中发送弹幕打赏点赞等实时互动功能。云巴聊天室支持图片上传文件发送文档评论系统正式上线新增搜索功能,我们会做得更好。 SDK 篇 Android SDK 更新 Release 1.6.3后台进程相互拉起的特殊版本 Release 1.6.4增加 so 文件 Release 1.8.0支持小米、华为推送,无需注册第三方账号 Release 1....

    liuchengxu 评论0 收藏0

发表评论

0条评论

StonePanda

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<