【问题标题】:How to use screen to issue a command in the background over an ssh session如何使用屏幕通过 ssh 会话在后台发出命令
【发布时间】:2016-11-21 18:53:08
【问题描述】:

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

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

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

ssh sohaib@localhost screen -dm sh testscript

但是什么也没发生。 screen 只是安静地退出而不写入文件 testfile。 如果我在没有 ssh 的情况下运行它,它会按需要工作。我在这里做错了什么?

【问题讨论】:

    标签: ssh background-process gnu-screen


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。我想我的问题写错了。屏幕退出不是问题。即使在这种情况下,测试文件也应该有我回显的文本。使用本地机器进行的测试只是为了让事情变得更简单。我的实际目标是在远程主机上启动 java 服务。而且我想使用脚本来执行此操作,因此登录当然无济于事。
    • 在我的测试中,文件中确实包含文本。我还注意到我的引用与你的不同。另外,我在脚本文件的顶部放置了一个#!,使其可执行,并使用./testscript 调用它——尝试更改它而不是使用sh testscript 调用它。此外,如果您想知道,#!/bin/bash 会告诉脚本在调用它时要运行什么可执行文件。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2010-12-03
    • 2013-08-26
    • 2021-10-09
    • 2015-08-08
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多