원격 프로그램 실행 및 완전 분리

원격 프로그램 실행 및 완전 분리

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

그런 다음 목록에서 하나를 선택하여 연결합니다.

$ 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

관련 정보