자동 업그레이드 프로그램 만드는 방법

neohwang의 이미지

직접 만든 데몬 프로그램을 자동으로 업그레이드 하는 방법좀 아시면 부탁드립니다.

저는 다음과 같이 하여 테스트 중인데.. 소켓이 안 닫기는 문제가 있습니다.

- A 데몬
- Upgrade용 데몬
- 새로운 B 데몬

"A데몬" 이 실행중 자기자신을 Upgrade 할 필요성이 있을때..
"Upgrade용 데몬" 을 실행시킵니다.
그러면 "Upgrade용 데몬"이 "A데몬"으로 SIGTERM을 날리고,
SIGTERM을 받은 "A 데몬"은 소켓을 닫고 종료합니다

<---- 문제는 여기서 발생되는 것 같습니다---->

그 후에 "Upgrade용 데몬"은 "새로운 B데몬"으로 변경후 실행시킵니다.

위의 경우에서 "A데몬"의 소켓이 닫기질 않아서
새로운 "B데몬"이 소켓을 열지 못해서 실행되질 않습니다.

"A데몬"이 종료될때, close(socketno)의 리턴값을 찍어봐도 정상적으로 닫기는 것을 확인했는데도..
UNIX Command에서 확인해 보면 여전히 그 포토가 Listen 하고 있습니다.

더더운 이상한 것은
"Upgrade용 데몬" 이 종료되면 Listen하고 있는 포트는 스스로 닫깁니다.

참고로 데몬은 다음 코드로 만들었습니다.

	// Deamon 으로 생성
	if((pid=fork())<0)	// fork() 실패
	{
		exit(f_code);
	}
	if(pid!=0)	exit(s_code);			// 부모 Process 종료

	setsid();							// 세션 리더로
	signal(SIGHUP,SIG_IGN);				// SIGHUP 시그널 무시
	if((pid=fork())!=0)	exit(f_code);	// 다시 자식 프로세스(손자)를 만든후, 부모 Process 종료

====
막막한 질문이지만,
혹시 조언해 주실수 있으면 무엇이든 부탁드립니다.

그리고.. 추가로 자기 자신 업그레이드 어떻게 하는게 옳은 것인지도요...

감사.. ^^

mangg의 이미지

혹...
A 데몬에서 소켓이 제대로 닫히지 않는 문제라면
setsockopt 함수를 검색하여
해 보심이 어떨까요??

int  on = 1; // true 
setsockopt(sock SOL_SOCKET, SO_REUSEADDR, &on);
[/code]

-------------------
나는 Copy&Paster 이다. 나의 화려한 기술 조합에 모두들 나를 두려워 한다. 나도 코드 Maker 이고 싶다.

neohwang의 이미지

제가 지금까지 생각한 결론은 다음과 같습니다.

fork()를 이용하여 "Upgrade용 데몬"을 실행시켰을 때,
"A데몬"에서 Listen하기 위해 열어놓은 Socket이 그대로 "Upgrade용 데몬"에 상속이 되어,

"A데몬"이 정상적으로 종료된 후에도,
"Upgrade용 데몬"에 복사된 Socket 때문에 계속 Listen 상태에 있는 것 같습니다.

이 Listen 중인 Socket을 닫을 방법이 없나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.