데몬을 외부에서 구동하거나 죽이기
글쓴이: snoopy / 작성시간: 수, 2003/08/27 - 5:36오후
데몬을 하나 만든다음 이를 외부에서 api를 사용해 구동시키거나 죽이려고 합니다.
죽이는거야 그렇다치고 죽인다음 살리려고하니(-_-) 어렵네요
이리저리 알아보니 xinetd를 사용하는 방법이 있던데
이방법이랑 제의도랑 좀 안맞는게 있습니다.
가령 데몬을 특정포트 9999로 xinetd에 등록한다음
9999로 소켓연결을 하여 데몬을 띄우는것까진 괜찮은데
이후에 같은 포트인 9999로 데몬이랑 통신을 하길 원하거든요
(데몬을 시동하는 api와 다른 api와의 일관성을 위해...)
근데 시동이후에 9999로 연결하면 데몬이랑 연결되는게 아니라
xinetd에 의해 새로 띄어진 데몬이랑 연결이 되는걸로 알고있습니다.
같은포트로 시동도 하고 이후에 통신도 할수 있는방법이 없을까요?
xinetd말고 다른방법도 괜찮습니다.
답변 부탁드립니다
Forums:
xinetd
제가 xinetd을 잘못이해하고 있었나하는 의문이 드는군요.
일단 xinetd은 포트를 감지하고 있다가 지정된 포트로 어떤한 이벤트가 도착하면
규정된 데몬을 띄워주는 역활까지만 하는것으로 알고 있습니다.
물론 그 데몬이 실행중이라면 xinetd은 관여를 하지 않는걸로 알고 있고요.
즉, xinetd이 포트로 들어오는 데이터를 직접 받아서 데몬에 넘겨주는 역활까지
하는게 아니라는 소리이지요.
그리고 만일 snoopy님이 말한대로 xinetd이 포트로 넘어오는 데이터를 받아서
해당 데몬에게 넘겨준다고 하더라도 아무문제가 없습니다.
결국은 같은 포트로 데이터를 주고 받는 결과가 되므로 프로그램상의 변화는
없을거라고 생각됩니다.
------------------------------
좋은 하루 되세요.
아
일단 xinetd에 등록된 포트로 connect하여 close하기 전까지
xinetd 상관없이 데몬과 통신을 잘 할수 있겠는데
(codebank님이 말씀하신 내용이 이부분이겠군요
제가 설명이 부족했습니다 T.T)
close이후에 다시 connect를 할경우가 문제입니다.
데몬이 connect할때마다 새로뜨는것이 아니라
데몬이 일단 하나뜨면 모든 연결이 그하나의 데몬과 이루어지길 원하는데
첨에 데몬의 구동을 xinetd를 통해 9999포트로 띄웠다면
이후에 9999포트로 connect를 하게되면 떠져있는 데몬과 통신하는게아니라
xinetd가 다시 새로운 데몬을 띄워서 연결해주는걸로 알고 있습니다.
xinetd를 사용해 어떤포트로 시동하고 이후에(다시 connect하여) 다시 같은포트로 통신하는게 가능한지 궁금합니다.
xinetd로 안된다면 다른방법도 상관없구요...
답변부탁드릴께요
에이전트 개념을 이용하시지요.
서버쪽에 일종의 대몬인 agent 류를 하나 설치하시고
(물론, 직접 만드셔야겠지요..)
agent에 접속해서 해당 커맨드일때 원하는 동작을 해주는
그런 프로그램을 작성하면 되지 않을까 생각해봅니다.
네트웍 프로그래밍을 조금만 해 본 사람이라면 그리 어렵지 않을 듯 합니다.
헤헤헤//
The Future !!!
두개의 daemon을 만들면 되지 않을까 생각됩니다.먼저 daemon
두개의 daemon을 만들면 되지 않을까 생각됩니다.
먼저 daemon1은 client에 알려진 포트(예를 들면 9999)를 통해 Listen 합니다. 이때 daemon1은 daemon2(실제 데이터 통신이 이루어질 포트에 Listen)의 포트를 알고 있고, Client에서 daemon1으로 접속해 오면 daemon2의 포트번호를 알려줍니다.
client는 daemon1의 9999와 관련된 연결을 끊고나서, 다시 daemon1이 알려준 포트를 통해 daemon2와 실질적인 통신을 하도록 만들면 님이 원하는 구조가 되지 않을까요?
물론 daemon2는 여러 connection을 동시에 처리할 수 있는 구조여야 하구여...
실제 이러한 구성은 모 Vender의 미들웨어에서 사용하는 방식이기도 합니다.
아
xinetd로는 시동과 이후의 연결을 위해 서로 다른포트를
사용하는수밖에 없겠네요
이렇게 하면 되겠군요
답변 감사드립니다^_^
댓글 달기