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

dbr*_*dbr 30 gnu-screen

基本上我有一个远程屏幕会话,我希望自动重新附加到..目前我正在使用以下命令(作为 iTerm 书签或别名)

ssh host -t screen -x thesessionname
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果会话因任何原因终止,我希望在下次连接时重新创建它。该-R用于标志screen几乎完美:

ssh host -t screen -R -S thesessionname
Run Code Online (Sandbox Code Playgroud)

..但是如果会话已经附加,则创建第二个会话(作为-R第一个分离会话的简单查找,如果没有找到,则创建一个新会话)

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

如果这不容易实现,我怎么能在它死掉时自动重新创建屏幕会话?也许一个通过 cron 运行的脚本寻找命名会话,如果它不存在就创建它?

Dan*_*ley 34

告诉 screen 更坚持尝试:

-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.
Run Code Online (Sandbox Code Playgroud)

所以将两者结合起来,你应该有你的解决方案(“-DR”相当于“-D -R”):

screen -DR <yoursession> 
Run Code Online (Sandbox Code Playgroud)

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

screen -ls
Run Code Online (Sandbox Code Playgroud)

  • 完美,`screen -x -R -S main` 是我最终使用的(在没有强制分离的情况下工作相同),谢谢! (6认同)

fre*_*eit 11

几个不错的选择。先说我最喜欢的:

screen -x -R
Run Code Online (Sandbox Code Playgroud)

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

screen -d -RR
Run Code Online (Sandbox Code Playgroud)

文档说“重新附加一个会话,必要时分离或创建它。如果有多个会话可用,请使用第一个会话。” 基本上,双 R 使它寻找要附加的第一个会话。

screen -D -RR
Run Code Online (Sandbox Code Playgroud)

“立即附上。不管这意味着什么,就去做吧。” 将分离并远程注销任何其他连接的会话并附加到它可以连接的第一个会话。基本上,做任何它需要做的事情来附加到一个现有的会话,如果那里没有任何东西,就创建一个新的。

第一个 (-x -R) 最不可能引起问题(不会断开您的其他连接),但是如果有任何东西可以附加,那么它总是会附加到某些东西上,如果没有任何东西可以附加,则创建一些东西。


cha*_*aos 5

我用

screen -dRRS sessname
Run Code Online (Sandbox Code Playgroud)

我不希望我在另一个 shell 上的整个登录都被删除,就像-D那样,而且我绝对不希望-x.