执行远程程序并完全分离它

执行远程程序并完全分离它

我需要在远程服务器上执行一个远程应用程序(名为 ConnectionManager),该应用程序使用 ncurses 库,从本地电脑启动它。

ConnectionManager 是一个使用 ncurses 并派生另一个进程(本身)并等待传入​​ tcp/ip 连接的程序。

上:

Distributor ID: ScientificSL
Description:    Scientific Linux SL release 5.5 (Boron)
Release:        5.5
Codename:       Boron
(Like Centos5.5)

我使用这个脚本:

#!/bin/bash
INFORMIXDIR=/opt/informix
INFORMIXSERVER=server1_on
ONCONFIG=onconfig.eda
PATH=$PATH:$INFORMIXDIR/bin
export INFORMIXDIR INFORMIXSERVER ONCONFIG PATH
echo $INFORMIXSERVER
echo $ONCONFIG
echo "Launch ConnectionManager"
export DISPLAY=:0.0 && xterm -e 'sudo -E /opt/informix/server /ConnectionManager' 

这一切都有效。

之前的脚本不起作用

Distributor ID: Scientific
Description:    Scientific Linux release 6.4 (Carbon)
Release:        6.4
Codename:       Carbon

ConnectionManager 不允许 IP 连接。

我想让 ConnectionManager 程序在远程计算机中运行,当我从本地计算机启动它时也是如此。

怎么了?

我努力了screen -d -m ./ConnectionManager。该应用程序可以运行,但我在远程计算机上看不到它。我需要在 xterm 窗口中查看 ConnectionManager。

sudo 是否可能阻止 ConnectionManager tcp/ip 连接?

更新:当我使用此命令时: sudo './ConnectionManager' 我立即收到以下消息: [1]+ 已停止 sudo './ConnectionManager'

我检查了代码,问题是int setpgrp(void)ConnectionManager中的指令。

为什么 ?

答案1

正如 @MichaelKjörling 在评论中建议的,您可以在终端多路复用器(例如或)中运行ConnectionManager或 脚本。screentmux

使用您的示例命令,您几乎已经完成了:

$ screen -d -m ./ConnectionManager

一旦运行此命令,您就会与终端分离,因此ConnectionManager启动后您将看不到任何输出。您可以使用以下命令重新连接到此特定屏幕会话:

$ screen -r

要断开连接,请使用组合键Control+ A+ D。我一直记得助记词“注意”+“断开”。

如果您需要使用该脚本,可以稍微修改它,以便它也可以在screen会话中运行。

#!/bin/bash
INFORMIXDIR=/opt/informix
INFORMIXSERVER=server1_on
ONCONFIG=onconfig.eda
PATH=$PATH:$INFORMIXDIR/bin
export INFORMIXDIR INFORMIXSERVER ONCONFIG PATH
echo $INFORMIXSERVER
echo $ONCONFIG
echo "Launch ConnectionManager"
sudo -E /opt/informix/server/ConnectionManager

然后,您可以像ConnectionManager在屏幕会话中一样运行此脚本:

$ screen -d -m yourscript.bash

并使用我上面提到的相同的连接、断开连接方法。对于 screen,如果您有多个屏幕“会话”,您可以使用此命令列出它们:

$ screen -ls

然后从列表中选择一个进行连接:

$ screen -r <name>

例如:

$ screen -ls
There are screens on:
    1506.bp (Detached)
    32090.dl    (Detached)
2 Sockets in /var/run/screen/S-root.

$ screen -r 32090.dl

相关内容