如何使用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会话中在后台发出命令的主要内容,如果未能解决你的问题,请参考以下文章