我有一堆服务器,我使用screen
. 程序如下:
ssh
到服务器 XXX- 发射
screen
- 在几个标签中开始实验
- 分离
screen
- 断开与服务器的连接
在运行实验时,我可以ssh
通过访问所有服务器并列出我正在运行的进程(使用top
或ps
)轻松找到它们在哪些服务器上。
但是,一旦实验完成,我如何才能找到在哪些服务器上打开了屏幕会话(以便我可以查看输出、重新启动它们等)?
PS:我的实验也将它们的输出打印到文件中......但这不是我问题的重点。
我有一堆服务器,我使用screen
. 程序如下:
ssh
到服务器 XXXscreen
screen
在运行实验时,我可以ssh
通过访问所有服务器并列出我正在运行的进程(使用top
或ps
)轻松找到它们在哪些服务器上。
但是,一旦实验完成,我如何才能找到在哪些服务器上打开了屏幕会话(以便我可以查看输出、重新启动它们等)?
PS:我的实验也将它们的输出打印到文件中......但这不是我问题的重点。
要列出用户的所有屏幕会话,请以该用户身份运行以下命令:
screen -ls
要查看特定机器上的所有屏幕会话,您可以执行以下操作:
ls -laR /var/run/screen/
我在我的机器上得到这个:
gentle ~ # ls -laR /var/run/screen/
/var/run/screen/:
total 1
drwxrwxr-x 4 root utmp 96 Mar 1 2005 .
drwxr-xr-x 10 root root 840 Feb 1 03:10 ..
drwx------ 2 josh users 88 Jan 13 11:33 S-josh
drwx------ 2 root root 48 Feb 11 10:50 S-root
/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp 96 Mar 1 2005 ..
prwx------ 1 josh users 0 Feb 11 10:41 12931.pts-0.gentle
/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar 1 2005 ..
这是一个相当出色的 Unixy 使用 Unix 套接字包装在文件系统权限中来处理安全、状态和流。
命令screen -list可能是您想要的。
见人
虽然 joshperry 的回答是正确的,但我发现它没有告诉您屏幕名称(您使用 -t 选项设置的名称)非常烦人,这实际上是您用来识别会话的名称。(当然不是他的错,那是屏幕的缺陷)
这就是为什么我改为使用这样的脚本:ps auxw|grep -i screen|grep -v grep
我不太确定您的问题,但如果您真正想要的是列出当前打开的屏幕会话,请尝试:
screen -ls
For windows system
Open putty
then login in server
如果要在控制台中查看屏幕,则必须编写命令
Screen -ls
如果您必须访问屏幕,那么您必须使用以下命令
screen -x screen id
在命令行中写入PWD
以检查您当前所在的文件夹
在大多数情况下,一个screen -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
将列出屏幕会话。
这是另一个可能对您有用的技巧。
如果您在服务器 xxx 上的.bashrc文件中添加以下命令作为最后一行 ,那么它将在登录时自动重新连接到您的屏幕会话。
screen -d -r
希望你觉得它有用。
您可以使用以下命令。
screen -list
(或者)
screen -R
ps x | grep 屏幕
如果您使用该命令,请查看该屏幕正在运行什么
屏幕 -A -m -d php make_something.php
所以你使用屏幕来保持实验在后台运行,还是什么?如果是这样,为什么不直接在后台启动它呢?
./experiment &
如果您要问如何通知我完成的工作,如何将实验与邮件命令串在一起?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"