基本上我有一个远程屏幕会话,我希望自动重新连接到它。目前我正在使用以下命令执行此操作(作为 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
。