我需要在远程服务器上执行一个远程应用程序(名为 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
或 脚本。screen
tmux
使用您的示例命令,您几乎已经完成了:
$ 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