각 클러스터 노드에 xml-rpc 서버를 실행시키는 script를 어떻게

satyrs의 이미지

계산을 각각의 클러스터노드에 분할해서 합니다.

구체적 방법은 각 노드에 xml-rpc서버를 돌리고 마스터노드에서 작업 파라미터를 넘겨주는 방식입니다. 각각의 노드에 서버를 돌리는 script를 못짜서 현재 하나씩 들어가서 손으로 돌려주고 있습니다.

for n in ("09", 10, 11, 12, 13, 14, 15, 16, 17):
    os.system("rsh node%s python rpc_server.py" %(n,))

rsh를 써서 하려는데 문제는 rsh가 python 서버 코드가 끝날때 까지 기다린다는 겁니다. 그래서 다음으로 넘어가지 않죠. 다른 방법이 없을까요?

질문이 하나 더 있습니다. 직접 접속해서 env결과와 rsh node01 env의 결과가 다릅니다. rsh node01 env에는 안 나오는 것이 많습니다. 왜 이러죠?

zzaratra의 이미지

Makefile 를 만들어서 써도 되구요...
sf.net 있는 클러스터 shell 를 써도 되구요.. 괜찮은거 다운 받아서
python 쓰레드 써도 되지 않으려나...

저 같으면 make+shell 를 쓰겠습니다..

alfalf의 이미지

제가 노드 관리를 위해 만들어 사용하는 스크립트인데 도움이 되길 바라며 올려 봅니다. 제 경우 인증키 방식으로 ssh 접속을 이용하는데 rsh를 사용하신다니 아래 스크립트에서 ssh 부분을 rsh로 바꾸고 명령을 줄때 마지막에 "&"를 붙어 background로 실행시키시면 될것 같네요.

#!/bin/bash

function help {
	cat << HELP
Command handler for cluster Version 0.01

`basename $0` -c command [-f first node] [-l last node] [-h help]
HELP
}

function remove_tmpfiles {
	rm -f .${COMMAND_STRING}.node[0-9][0-9].err
	rm -f .${COMMAND_STRING}.node[0-9][0-9].out
}

COMMAND=""
ALIVE_NODES=""
NODE_NUM=0
CURRENT_DIR=`pwd`
FIRST=2
LAST=30
REMOVE="0"

while [ -n "$1" ]
do
	case "$1" in
	"-c")
		if [ -z "$2" ]; then help; exit 255; fi
		COMMAND="$2"
		shift 2
		;;
	"-f")
		if [ -z "$2" ]; then help; exit 255; fi
		FIRST="$2"
		shift 2
		;;
	"-l")
		if [ -z "$2" ]; then help; exit 255; fi
		LAST="$2"
		shift 2
		;;
	"-h")
		help
		exit 255
		;;
	*)
		help
		exit 255
		;;
	esac
done

if [ -z "${COMMAND}" ]
then
	help
	exit 255
fi

COMMAND_STRING="`basename ${COMMAND%% *}`"

for i in `seq ${FIRST} ${LAST}`
do
	node="node`printf "%02i" ${i}`"
	echo -n "Check up ${node}... "
	if [ "`ssh -n ${node} "uname -n" 2> /dev/null`" == "${node}" ]
	then
		NODE_NUM=$((NODE_NUM + 1))
		ALIVE_NODES="${ALIVE_NODES} ${node}"
		echo "OK"
	else
		echo "Fail"
		time=10
		echo "${node} has problem. Waiting ${time} seconds before starting..."
		echo -ne "(Control-C to abort)...\nin: "

		for time in `seq ${time} -1 1`
		do
			echo -n "$time "
			sleep 1
		done
		echo
	fi
done

trap 'kill ${PIDS}; remove_tmpfiles; exit 255' KILL INT TERM

PIDS=""
for node in ${ALIVE_NODES}
do
	NODE_NUM=$((NODE_NUM - 1))
	
	echo "Start up at ${node}: ${COMMAND}"
	ssh -n ${node} "[ -d ${CURRENT_DIR} ] && cd ${CURRENT_DIR}; ${COMMAND}" \
2> .${COMMAND_STRING}.${node}.err \
> .${COMMAND_STRING}.${node}.out &
	PIDS="${PIDS} $!"
done

wait

for file in .${COMMAND_STRING}.node[0-9][0-9].out
do
	echo "===== ${file/./} ====="
	cat "${file}"
	echo
	echo
done > ${COMMAND_STRING}.out

for file in .${COMMAND_STRING}.node[0-9][0-9].err
do
	echo "===== ${file/./} ====="
	cat "${file}"
	echo
	echo
done > ${COMMAND_STRING}.err

remove_tmpfiles

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.