我有很多服务器,我在它们上运行实验 screen. 。程序如下:

  1. ssh 到服务器 XXX
  2. 发射 screen
  3. 在几个选项卡中开始实验
  4. 分离 screen
  5. 与服务器断开连接

当实验运行时,我可以轻松找到它们所在的服务器 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"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top