产线如果需要批量操作,有时候需要一起来一起观察日志,比如同时tail日志,同时开启top等,这样用ansible就不太合适了,以前用screen 手动一个个开窗口,或者借助xshell自带的一些功能进行处理,之前一个同事推荐了tmux,网上教程一大堆,其实大致逻辑就是新建session->新建window->划分pane, 其中比较好的一篇教程是这个:[https://www.w3cschool.cn/tmux/tji9dozt.html],但实际使用中,老是记命令其实也记不全,所以根据需求用脚本会比较好,简单记录下经常使用的脚本。
#! /bin/bash
while getopts "m:u:p:f:s:" opt
do
case $opt in
m)mode=$OPTARG;; #登录模式,ssh/login脚本
u)user=$OPTARG;; #登录用户
p)port=$OPTARG;; #登录端口
f)file=$OPTARG;; #登录服务器清单
s)sync=$OPTARG;; #是否所有窗口同步
esac
done
#argNum=$#
if [ -z $file ]
then
echo "file opts must have, please check"
exit 0
fi
if [ $mode == "ssh" ]
then
if [ -z $user ] || [ -z $port ]
then
echo "use ssh mode must have user and port opts"
else
CMD="ssh -l $user -p $port "
fi
fi
if [ $mode == "login" ]
then
CMD="python login.py "
fi
starttmux() {
local j=0
for host in `cat $file`
do
echo "$host"
hosts[$j]=$host
((j++))
done
tmux new-window -a -n "newWindow" "$CMD{$host[0]}"
unset hosts[0]:
for i in "${hosts[@]}"; do
tmux split-window -t "newWindow" -h "$CMD $i"
tmux select-layout -t "newWindow" tiled
done
tmux select-pane -t 0
if [ $sync == "true" ]
then
tmux set-window-option -t "newWindow" synchronize-panes on
tmux set synchronize-panes on
fi
}
starttmux