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

问题描述 投票:0回答:1

我习惯使用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的情况下运行它,它会按预期工作。我在这做错了什么?

ssh background-process gnu-screen
1个回答
0
投票

问题是在脚本退出后退出屏幕。 -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会话,屏幕将继续运行。

© www.soinside.com 2019 - 2024. All rights reserved.