求助:编写Shell脚本实现devs组多用户共享Screen/Tmux会话
我来帮你解决这个共享会话的问题!你需要创建一个能让devs组全体用户访问的会话,同时运行Node.js脚本,我分别给你梳理Screen和Tmux的正确实现方法:
一、Screen 实现方案
你之前的配置和脚本有两个关键问题:一是不知道怎么给整个组添加权限,二是脚本的执行逻辑有误。
1. 修正配置文件
Screen 支持通过%前缀指定组,修改你的_shared-conf/multi-screen.conf:
multiuser on acladd %devs # 用%开头表示添加整个devs组的访问权限 # 如果需要单独添加某个用户,继续保留即可 # acladd rackover # acladd jj
2. 修正启动脚本
你原来的脚本里screen -r会尝试连接会话,导致后续命令无法执行。正确的写法是先创建分离式会话,再向会话发送执行命令:
#!/bin/bash # Launcher script for js bot # 创建带自定义配置的分离式会话 screen -c ./_shared-conf/multi-screen.conf -dmS botScreen # 向会话发送Node.js命令(末尾的\n模拟回车执行) screen -S botScreen -X stuff "nodejs init_bot.js\n"
3. 其他用户访问方式
devs组的用户只需要执行以下命令就能加入共享会话:
screen -x 你的用户名/botScreen
(把你的用户名替换成创建会话的那个用户,比如你是rackover,就写rackover/botScreen)
二、Tmux 实现方案
你之前的Tmux操作逻辑不对,正确的共享流程应该是这样的:
1. 创建会话并配置组权限(以Alice为例)
直接在命令行创建分离式会话并配置权限,不用进入会话操作:
# 创建分离式会话,同时运行Node.js脚本 tmux new -d -s bot_session "nodejs init_bot.js" # 开启会话的多用户访问权限 tmux set -s -t bot_session allow-access on # 给devs组添加会话访问权限 tmux acl add -t bot_session -g devs
如果需要进入会话调整参数(比如开启鼠标支持),可以先执行tmux attach -t bot_session,按下Ctrl+b后输入:set -g mouse on,再按下Ctrl+b d分离会话。
2. 其他用户访问方式
devs组的用户(比如Bob)直接执行以下命令就能加入会话:
tmux attach -t bot_session
你之前操作的问题
你让Bob用tmux new -s bob -t alice的方式是错误的,这是创建一个关联到alice会话的新会话,但没有配置权限的话无法正常访问。正确的方式是直接attach到目标会话,前提是创建者已经给devs组开了权限。
注意事项
- 确保
devs组存在,且所有需要访问的用户都在这个组里,可以用groups 用户名命令检查用户所属组 - Screen配置文件要确保创建会话的用户有读取权限
- Tmux如果是旧版本(低于2.3),
acl add命令可能不支持,需要用tmux set -g @acl 'devs'之类的替代方式,建议升级到新版Tmux获得更好的权限管理支持
内容的提问来源于stack exchange,提问作者Rackover
相关产品推荐
相关产品推荐

