重新附加或创建命名屏幕会话?(或持续的屏幕会话)


27

基本上,我有一个远程屏幕会话,我希望自动重新连接到该会话。目前,我正在通过以下命令(作为iTerm书签或别名)执行此操作

ssh host -t screen -x thesessionname

这可以正常工作,但是如果会话由于某种原因而终止,我希望在下次连接时重新创建它。的-R标记几乎screen是完美的:

ssh host -t screen -R -S thesessionname

..但是如果会话已连接,则进行第二个会话(-R简单地寻找第一个分离的会话,如果找不到,则创建一个新的会话)

有没有一种方法可以使-R标志也查找附加的会话,并且仅thesessionname在不存在会话的情况下才创建一个新会话?

如果这不容易实现,我该如何在死后自动重新创建屏幕会话?也许通过cron运行的脚本查找命名的会话,创建该脚本不应该存在?

Answers:


32

告诉屏幕在尝试时要更持久一些:

-D -R
    Attach here and now. In detail this means: If a session is run-
    ning,  then  reattach.  If necessary detach and logout remotely
    first.  If it was not running create it and  notify  the  user.
    This is the author's favorite.

因此,将两者结合起来,就应该有解决方案(“ -DR”等效于“ -D -R”):

screen -DR <yoursession> 

此外,您可以通过以下方式查看正在运行的会话:

screen -ls

5
完美,screen -x -R -S main是我最终使用的工具(没有强制分离的情况下仍然可以使用),谢谢!
dbr

有时,您想使用时sceen -r <yoursession>,会在附加时给出错误(而不是创建新的会话)。
危险89年

11

一些好的选择。首先,我的最爱:

screen -x -R

这将附加到第一个可用的屏幕会话(如果连接了另一个连接则共享),并且如果根本没有屏幕会话,则开始一个新的屏幕会话。

screen -d -RR

该文档说:“重新附加会话,并在必要时分离或创建它。如果有多个会话,则使用第一个会话。” 基本上,double-R使它寻找要附加的第一个会话。

screen -D -RR

“现在就安装。无论是什么意思,都要做。” 将分离并远程注销任何其他连接的会话,并附加到可以的第一个​​会话。基本上,执行附加到现有会话的所有操作,如果没有任何内容,则创建一个新会话。

第一个(-x -R)引起问题的可能性最小(不会断开您的其他连接),但是如果有任何附加内容,则简单地始终附加到某个内容,如果没有任何附加内容,则仅创建简单的内容。


1
这些都是不错的/方便的选项,但是它们都没有回答原始的问题,该问题是通过name(重新)连接到会话。
丹尼尔(Daniel)

5

我用

screen -dRRS sessname

我不希望像在其他外壳程序上那样删除整个登录名-D,并且我绝对不希望的多连接模式-x

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.