我想知道这是否可行。我希望用户能够在我们的某些主机上启动屏幕,以便多路复用他们的终端登录会话。但是,我不希望他们能够分离屏幕并让它在后台运行。
原因在于登录这些机器的唯一方法是通过集群作业提交系统,因此如果屏幕断开连接并且用户注销,那么唯一的返回方法就是如果他们碰巧在下一次作业提交时回到同一个节点。
答案1
echo autodetach off >> ~/.screenrc
阅读 screen 手册页以了解 autodetach。这将确保如果连接被禁用,它会简单地终止所有进程。
您仍然需要提到的其他解决方案......
答案2
您可以通过以下方式“软”禁用分离
bind d
,.screenrc
删除默认的 ^AD 键绑定以进行分离。或者
bind d echo Don't detach screens, it won't work because of the cluster.
硬禁用分离功能(包括命令行形式)需要分叉您自己的版本screen
并编写代码来实现该功能。您知道,这是可以做到的,因为它是一个开源项目。
答案3
这里有一个黑客你可以将其放入 bash 脚本中,然后每分钟使用 cron 运行一次以终止分离的会话。但这不是最干净的解决方案 :-P
screen -S $(screen -ls | grep Detached | awk '{ print $1}') -X kill
答案4
由于分离屏幕会使用户保持登录状态,因此您可以在登录脚本中添加检查,以查看用户已登录到哪个服务器。这比仅仅禁用分离要费力得多,但对您的用户来说却更有用。
脚本的一个想法是:遍历服务器,grep
登录输出who
,然后将用户登录到报告他们首先登录的服务器;否则,按现在的方式登录(以处理用户干净注销的情况)。