我有一堆服务器,我在上面用屏幕运行实验。操作步骤如下:
ssh到服务器XXX 启动屏幕 在几个标签开始实验 分离的屏幕 从服务器断开连接
当实验正在运行时,我可以通过对所有服务器进行sshing并列出我正在运行的进程(使用top或ps)来轻松地找到它们在哪些服务器上。
然而,一旦实验完成,我如何才能找到在哪些服务器上打开了屏幕会话(以便我可以查看输出,重新启动它们,等等)?
PS:我的实验也把它们的输出打印到文件中…但这不是我问题的重点。
我有一堆服务器,我在上面用屏幕运行实验。操作步骤如下:
ssh到服务器XXX 启动屏幕 在几个标签开始实验 分离的屏幕 从服务器断开连接
当实验正在运行时,我可以通过对所有服务器进行sshing并列出我正在运行的进程(使用top或ps)来轻松地找到它们在哪些服务器上。
然而,一旦实验完成,我如何才能找到在哪些服务器上打开了屏幕会话(以便我可以查看输出,重新启动它们,等等)?
PS:我的实验也把它们的输出打印到文件中…但这不是我问题的重点。
当前回答
在大多数情况下,屏幕-RRx $username/就足够了:)
如果你仍然想列出所有的屏幕,那么输入以下内容 脚本在你的路径,并称之为屏幕或任何你喜欢:
#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
exec /usr/bin/screen "$@"
else
shopt -s nullglob
screens=(/var/run/screen/S-*/*)
if (( ${#screens[@]} == 0 )); then
echo "no screen session found in /var/run/screen"
else
echo "${screens[@]#*S-}"
fi
fi
它的行为和屏幕完全一样,除了显示所有屏幕会话, 当把选项-ls-all作为第一个参数时。
其他回答
虽然joshperry的回答是正确的,但我发现它没有告诉你屏幕名(你用-t选项设置的),这实际上是你用来识别会话的。 (当然,这不是他的错,那是屏幕的缺陷)
这就是为什么我使用这样的脚本:ps auxw|grep -i screen|grep -v grep
简单的指南来记住…
screen -创建一个屏幕
screen - List -列出所有分离的(正在运行的)屏幕及其屏幕id。
在这幅图中
6764.分- 1. v1091330
是屏幕ID。
screen -x [screen id] -连接/连接到特定的运行屏幕。
在屏幕中按Ctrl + D -终止/停止屏幕运行。
Ctrl + A,然后在屏幕中按D -从屏幕上分离而不干扰它。
killall screen -分离或终止所有屏幕。
For windows system
Open putty
then login in server
如果你想在控制台看到屏幕,那么你必须写命令
Screen -ls
如果你必须访问屏幕,那么你必须使用下面的命令
screen -x screen id
在命令行中写入PWD以检查当前所在的文件夹
在大多数情况下,屏幕-RRx $username/就足够了:)
如果你仍然想列出所有的屏幕,那么输入以下内容 脚本在你的路径,并称之为屏幕或任何你喜欢:
#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
exec /usr/bin/screen "$@"
else
shopt -s nullglob
screens=(/var/run/screen/S-*/*)
if (( ${#screens[@]} == 0 )); then
echo "no screen session found in /var/run/screen"
else
echo "${screens[@]#*S-}"
fi
fi
它的行为和屏幕完全一样,除了显示所有屏幕会话, 当把选项-ls-all作为第一个参数时。
很多人已经指出了这一点
$ screen -ls
会列出屏幕会话。
这是另一个可能对你有用的技巧。
如果您在.bashrc . xml文件的最后一行添加以下命令 文件,然后它将自动重新连接到您的 登录时屏幕会话。
screen -d -r
希望对你有用。