如何通过配置或环境变量设置tmux默认socket,实现共享文件系统的多服务器共用同一会话
如何通过配置或环境变量设置tmux默认socket,实现共享文件系统的多服务器共用同一会话
哈哈,这个场景我太有共鸣了!之前维护集群服务器的时候也碰到过一模一样的问题——负载均衡代理跳不同机器,tmux会话散在各自的/tmp里,每次attach都要猜是哪台,烦得要死。给你几个省心的方案,配置一次之后彻底不用手动敲socket路径:
方案一:修改tmux配置文件(最推荐)
这是一劳永逸的方法,直接让tmux默认使用共享文件系统里的socket:
- 打开你的tmux配置文件,一般是
~/.tmux.conf,如果没有就自己创建一个(用touch ~/.tmux.conf就行) - 在文件里添加一行配置:
把set-option -g default-socket-path /path/to/your/shared/fs/tmux-shared.sock/path/to/your/shared/fs/换成你实际的共享文件系统路径,比如/mnt/cluster-shared/tmux/,文件名可以随便取,比如main-session.sock - 保存配置后,要么重启tmux,要么在现有tmux会话里按
Ctrl+B然后输入冒号:source ~/.tmux.conf重载配置 - 之后不管你从哪台服务器SSH上来,直接敲
tmux开新会话,或者tmux attach连已有会话,都会自动用这个共享socket,完全不用加-S参数!
方案二:用Shell别名或环境变量兜底
如果不想改tmux配置,或者需要临时切换不同的共享socket,用Shell配置也很方便:
方法A:设置Shell别名
在你的Shell配置文件里(比如~/.bashrc、~/.zshrc,取决于你用的Shell)加一行:
alias tmux='tmux -S /path/to/your/shared/fs/tmux-shared.sock'
保存后执行source ~/.bashrc(或对应的配置文件)生效,之后敲tmux就自动带上共享socket参数了。
方法B:利用tmux的环境变量
tmux有个TMUX_TMPDIR环境变量,它会让tmux把默认的socket文件放到指定目录下。不过要注意,默认的socket名是带进程ID的,如果你想要固定名字,还是用上面的别名或配置文件方法更直接。如果想用这个变量,就在Shell配置里加:
export TMUX_TMPDIR=/path/to/your/shared/fs/
几个关键注意事项
- 务必保证两台服务器上的共享文件系统路径完全一致,比如都是
/mnt/shared/tmux/,不然tmux会找不到socket文件 - 要确认你的用户账号在两台机器上都对这个共享路径有读写权限,不然tmux创建不了socket或者无法连接
- 如果之前已经在各自机器上开了旧的tmux会话,这些会话还会留在原来的/tmp目录里,建议关掉旧会话,重新用共享socket开新会话,避免混淆
备注:内容来源于stack exchange,提问作者Migwell
相关产品推荐
相关产品推荐

