重新连接或创建一个命名的屏幕会话?(或持久屏幕会话)

重新连接或创建一个命名的屏幕会话?(或持久屏幕会话)

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

ssh host -t screen -x thesessionname

这很好,但如果会话因某种原因终止,我希望在下次连接时重新创建它。-R标志screen几乎完美的:

ssh host -t screen -R -S thesessionname

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

有没有办法让标志也寻找附加的会话,并且只有在不存在-R时才创建一个新的?thesessionname

如果这不容易做到,当屏幕会话终止时,我该如何自动重新创建它?也许可以通过 cron 运行脚本来查找命名的会话,如果该会话不存在,则创建它?

答案1

告诉屏幕更加坚持尝试:

-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

答案2

有几个不错的选择。首先,我最喜欢的是:

screen -x -R

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

screen -d -RR

文档中说“重新连接一个会话,并在必要时分离或创建它。如果有多个会话可用,则使用第一个会话。”基本上,双 R 会让它寻找要连接的第一个会话。

screen -D -RR

“立即附加。不管这意味着什么,就这么做。” 将分离并远程注销任何其他附加会话,并附加到它能附加的第一个会话。基本上,它会做它需要做的一切来附加到现有会话,如果那里没有任何内容,则会创建一个新的会话。

第一个(-x -R)最不可能发生问题(不会断开您的其他连接),但如果有任何东西可附加,它就会始终附加到某个东西上,如果没有东西可附加,它就会创建某个东西。

答案3

我用

screen -dRRS sessname

我不希望像那样丢失我在另一个 shell 上的整个登录信息,-D而且我绝对不想要 的多重附加模式-x

相关内容