如何使用screen在ssh会话中在后台发出命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用screen在ssh会话中在后台发出命令相关的知识,希望对你有一定的参考价值。

我习惯使用linux终端和nohup over ssh来发出在后台运行的命令,即使退出ssh会话也是如此。出于某种原因,nohup似乎在最新的MACOS中被打破。出于这个原因,我试图使用screen命令执行这个小样本脚本。

sleep 10
echo "this is my test file" > testfile

此文件保存为tst脚本。然后我发出以下命令。

ssh sohaib@localhost screen -dm sh testscript

但没有任何反应。屏幕只是安静地退出而无需写入文件testfile。如果我在没有ssh的情况下运行它,它会按预期工作。我在这做错了什么?

答案

问题是在脚本退出后退出屏幕。 -dm用于守护,即继续运行的脚本。

显示屏幕在10秒后退出:

在远程主机上(文件是可执行的):

ttucker@merlin:~$ cat test.sh 
#!/bin/bash
echo derp > /tmp/test.txt
sleep 10

本地机器上的命令:

[ttucker@localhost ~]$ ssh ttucker@merlin 'screen -dmS my_screen ~/test.sh'

跑完之后。

在远程计算机上,屏幕运行几秒钟后:

ttucker@merlin:~$ screen -ls
There is a screen on:
    23141.my_screen (11/21/2016 07:05:11 PM)    (Detached)
1 Socket in /var/run/screen/S-ttucker.

在远程机器上,超过10秒钟后:

ttucker@merlin:~$ screen -ls
No Sockets found in /var/run/screen/S-ttucker.

修改脚本以保持运行,从而保持屏幕显示:

如果您确实在运行需要保持运行的脚本,则可以在脚本中执行以下操作:

#!/bin/bash
while true; do
    # Do something
    sleep 10
done

这将做一些事情,等待10秒,然后再循环。

或者,手动分离屏幕:

你可以ssh到远程机器,运行屏幕,然后按Ctrl+A,D,按Ctrl并按住,然后点击A然后点击D。您现在可以退出SSH会话,屏幕将继续运行。

以上是关于如何使用screen在ssh会话中在后台发出命令的主要内容,如果未能解决你的问题,请参考以下文章

linux如何关闭ssh会话不停止程序运行 screen

CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)

SSH远程会话管理工局,screen使用教程

如何使用 ssh 在后台运行命令并分离会话

实用小工具:screen

Screen命令让Linux shell在后台运行