通过 SSH 在 Screen 会话中启动程序

通过 SSH 在 Screen 会话中启动程序

好的,有几个与这个类似的主题,但我想要做的是在远程计算机的屏幕会话中运行一个程序。

以我为榜样此主题

为了确保正确,我输入以下命令:

ssh  [email protected] "screen -S test -d -m roslaunch startup startup_node"

它既不会启动新的屏幕会话“测试”,也不会运行我的脚本“roslaunch startup startup_node”

我可以创建一个远程会话“测试”:

ssh  [email protected] "screen -S test -d -m"

但是我怎样才能在其中运行命令呢?该命令如何screen -X与命名屏幕一起使用?

我已经尝试过,基于

 ssh [email protected] "screen -X stuff "roslaunch startup startup_node^M" "

但同样,它似乎无法远程启动该过程。如果您已经通过 ssh 连接到远程,则这两个命令都有效。

我还尝试在我的远程机器上编写一个包含以下内容的脚本 startnav.sh, screen -S nav -d -m roslaunch startup startup_node 并通过以下方式运行它:

ssh [email protected] -t "./startnav.sh"

这将创建屏幕实例,但它已失效,如以下输出所示

    ~$ ssh [email protected] -t screen -r nav
     There is a screen on:
            4506.nav    (04/06/15 12:30:09) (Dead ???)
     Remove dead screens with 'screen -wipe'.
     There is no screen to be resumed matching nav.
     Connection to 192.168.1.5 closed.

最后,我遵循了问题在这里

并且可以执行正常的 bash 命令,只是不能执行“roslaunch startup startup_node”

例如

ssh -f [email protected]  "screen -dm -S nav htop "

将在远程机器上的单独屏幕中启动 htop 会话。该-f标志似乎很重要。但对于 roslaunch 或包含 roslaunch 的脚本仍然不起作用,尽管它在没有 ssh 的情况下运行时确实有效。此外,对于临时程序(例如)sleep 10,屏幕只会存在到该脚本执行完成为止。

答案1

就像问题中的最后一个示例一样,问题不在于 ssh 或 screen 环境,而是没有设置几个 ROS 特定的环境变量。这是因为~/.bashrc没有在远程调用,所以远程调用会帮我设置它们。

一旦我包含了特定的环境变量的设置,即

source /ros/devel/setup.sh

系统运行正常。

脚本文件startnav.sh

#!/bin/bash

source ~/ros_ws/devel/setup.sh
roslaunch startup startup_node.launch

并调用加载脚本文件:

ssh [email protected] -f "screen -S nav -dm ./startnav.sh"

相关内容