V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wsseo
V2EX  ›  Linux

tmux 怎么用 shell 脚本操作?

  •  
  •   wsseo · 2020-08-26 09:35:57 +08:00 · 4002 次点击
    这是一个创建于 1557 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/bin/sh
    #服务器要起一些程序,目前在测试阶段,所有很多组件都在前台运行
    #每次都用 tmux 一个一个启动,ctrl+b c,ctrl+b c....,比较麻烦
    tmux new -s testapp
    执行 app01,有前台输入
    新建一个窗口,执行 app02
    再建一个窗口,执行 app03
    ...
    最后退出
    这样的操作用 shell 脚本怎么写?
    
    16 条回复    2020-08-27 09:42:58 +08:00
    nickchenyx
        2
    nickchenyx  
       2020-08-26 09:46:53 +08:00
    恰好我也有这样的诉求,我写了个 tmux-init.sh 脚本完成这个工作,等于重启的话执行下脚本就可以拉起工作台了。

    ```shell
    # new bastion session
    tmux new -s bastion -d
    # rename window
    ## --- DEV ---
    tmux rename-window -t "bastion:1" dev
    # send command
    tmux send -t "bastion:dev" '/Users/nickchen/workspace/bastion.sh java-run "cd /home/nickchen/java-app/"' Enter
    # split window horizontally
    tmux split-window -t "bastion:dev"
    tmux send -t "bastion:dev" '/Users/nickchen/workspace/bastion.sh inner-01 "cd /opt"' Enter
    # split window vertically
    tmux split-window -h -t "bastion:dev"
    tmux send -t "bastion:dev" '/Users/nickchen/workspace/bastion.sh inner-02 "cd /opt"' Enter
    ```

    这是一部分啦,本质上都是一样的原理,去看下 tmux send 的操作就行,我这里是创建多个 window + 每个 window 分多个 panel 。
    lululau
        3
    lululau  
       2020-08-26 09:47:35 +08:00
    systemd, supervisor, foreman 之类的不香吗

    非用 tmux 的话,直接调 tmux sub-commands 也可以,或者用 tmuxinator 之类的
    vsyour
        4
    vsyour  
       2020-08-26 10:07:34 +08:00
    ```bash
    cd ;for i in `ls results_*/ -d`;do cd;cd $i;tmux new -s $i -d;tmux send -t "$i" 'for i in `seq 3`;do python3 run.py ;sleep 600;done' Enter;done

    ```
    参考
    功能介召:
    1. 扫描当前目录中 results_ 开头的目录
    2. 进入当前用户,进入 results_ 列表中的一个目录.
    3. 创建一个以 results_xxxx 命名的 tmux 放到后台
    4. 执行 results_xxxx 目录下的 run.py 脚本. 执行 3 次.每次执行完后暂停 10 分钟.
    chenqh
        5
    chenqh  
       2020-08-26 10:14:40 +08:00
    tmuxp?
    chenqh
        6
    chenqh  
       2020-08-26 10:15:07 +08:00
    还有输入?那忽略我吧
    wsseo
        7
    wsseo  
    OP
       2020-08-26 10:22:03 +08:00
    @chenqh 是有输出,笔误了
    ksc010
        8
    ksc010  
       2020-08-26 10:30:59 +08:00
    https://github.com/tmux-python/libtmux
    python 操作 tmux 的库
    chenqh
        9
    chenqh  
       2020-08-26 10:33:38 +08:00
    @wsseo 那就 tmuxp
    chenqh
        10
    chenqh  
       2020-08-26 10:35:42 +08:00
    tmux 关闭自动 rename

    vim ~/.tmux.conf

    添加
    ```

    set-window-option -g automatic-rename off
    set-option -g allow-rename off
    ```
    wsseo
        11
    wsseo  
    OP
       2020-08-26 10:58:54 +08:00
    先用笨方法
    ```
    #!/bin/sh
    #服务器要起一些程序,目前在测试阶段,所有很多组件都在前台运行
    #每次都用 tmux 一个一个启动,ctrl+b c,ctrl+b c....,比较麻烦
    tmux new -s testapp -d
    tmux send-keys -t testapp:0 'ping www.baidu.com' C-m
    tmux new-window -t testapp:1
    tmux send-keys -t testapp:1 'vi haha.txt' C-m
    ...
    wsseo
        12
    wsseo  
    OP
       2020-08-26 11:00:37 +08:00
    tmux new-window -t testapp:1 -d
    LudwigWS
        13
    LudwigWS  
       2020-08-26 11:25:05 +08:00
    挺有意思的,学习一下
    ksc010
        14
    ksc010  
       2020-08-26 14:40:57 +08:00
    还有一个方法就 安装 mux
    使用编写配置文件
    secondwtq
        15
    secondwtq  
       2020-08-26 14:59:58 +08:00
    我正好搞过这个,需求是给 B 站直播 up 主录回放。方案是在一个 tmux pane 里面起一个循环轮询 B 站 API,检测到状态在直播就再开一个 pane 用 you-get 下载,完后 ffmpeg 转一遍: https://github.com/secondwtq/bmon

    用不着 send-keys,直接东西写进一脚本里面 split-pane/new-window/split-window 就行,不然你开的 shell 还得手动关
    billgreen1
        16
    billgreen1  
       2020-08-27 09:42:58 +08:00
    tmuxinator
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2166 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:16 · PVG 09:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.