リモートプログラムの実行と完全分離

リモートプログラムの実行と完全分離

ncursesライブラリを使用するリモートサーバーでリモートアプリケーション(ConnectionManagerという名前)を実行し、それを自分のローカルコンピュータで起動する必要があります。

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 -ls

次に、リストから1つを選択してリンクします。

$ 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

関連情報