如何列出正在运行的屏幕会话?
-
22-08-2019 - |
题
我有很多服务器,我在它们上运行实验 screen
. 。程序如下:
ssh
到服务器 XXX- 发射
screen
- 在几个选项卡中开始实验
- 分离
screen
- 与服务器断开连接
当实验运行时,我可以轻松找到它们所在的服务器 ssh
访问所有服务器并列出我正在运行的进程(使用 top
或者 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 Sockets 包裹在文件系统权限中来处理安全、状态和流。
其他提示
命令 屏幕列表 也许就是你想要的。
请参阅 男人
虽然 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/
就足够了 :)
如果您仍想列出所有屏幕,请填写以下内容 脚本,并将其命名为 screen 或任何你喜欢的名字:
#!/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 服务器 xxx 上的文件,然后它会自动重新连接到您的 登录时的屏幕会话。
screen -d -r
希望你觉得它有用。
ps x | grep SCREEN
如果您使用该命令,则可以查看该屏幕正在运行什么
屏幕-A -m -d php make_something.php
所以你使用 screen 来让实验在后台运行,或者什么?如果是这样,为什么不在后台启动它呢?
./experiment &
如果您问如何获得我完成的工作的通知,那么将实验与邮件命令串在一起怎么样?
./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"