script가 오동작합니다.

km192의 이미지

snmp의 agent에서 등록된 private MIB의 OID로 snmpget을 하면
모니터링하고자 하는 process의 정보를 manager쪽으로 전송하게 하는
작업을 하려하는데요..

agent는 내부적으로 system()을 이용해서 script를 실행하게 하고,
script에서는 top과 prstat 명령어를 이용해서
각종 꼼수를 동원해서 필요한 부분만 파싱해서 파일로 저장하게 했습니다.
그럼 agent는 다시 그 파일을 열어서 파싱하고 manager에 전송할
메세지를 만들게 작업을 했습니다.

그럼 여기서 살포시 질문 들어가볼께요...

똑같은 소스로 Solaris9에서는 잘 동작을 합니다.
그런데 AS4에서 이상하게 동작을 하네요..
아래는 실제 실행시킨 script구요

TEMPFILE="temp.txt"
RESULTFILE="/usr/local/share/snmp/procinfo"
SYSTEM=`uname`
 
IF_PROC0="ProcMain"
IF_PROC1="ProcStart"
IF_PROC2="Proc2"
COMM_PROC0="test"
COMM_PROC1="java"
COMM_PROC2="httpd"
 
rm -f $RESULTFILE
 
# For Solaris System
if [ "$SYSTEM" = "SunOS" ]; then
    prstat -u km192 1 1 > $TEMPFILE
    touch $RESULTFILE
 
    for i in $IF_PROC0 $IF_PROC1 $IF_PROC2 
    do
        LINECOUNT=`cat $TEMPFILE | grep $i | wc -l`
 
        if [ $LINECOUNT -eq 1 ]; then
 
            INFO=`cat $TEMPFILE | grep $i | awk '{print$1,$3,$9}' | sed s/%//g`
            PROCINFO="0  $INFO  $i"
                        echo "$PROCINFO" >> $RESULTFILE
 
                elif [ $LINECOUNT -gt 1 ]; then
                        while [ $LINECOUNT -gt 0 ]
                        do
                                        INFO=`cat $TEMPFILE | grep $i | head -n $LINECOUNT | tail -1 | awk '{print$1,$3,$9}' | sed s/%//g`
                                        PROCINFO="0  $INFO  $i"
                                        echo "$PROCINFO" >> $RESULTFILE
 
                                        LINECOUNT=`expr $LINECOUNT - 1`
                        done
 
        else
            PROCINFO="1  0  0  0  $i"
                        echo "$PROCINFO" >> $RESULTFILE
        fi
 
    done
 
 
# For Linux System
elif [ "$SYSTEM" = "Linux" ]; then
    top -u km192 -d 1 -n 1 | col -b > $TEMPFILE
    touch $RESULTFILE
 
    for i in $COMM_PROC0 $COMM_PROC1 
    do
        LINECOUNT=`cat $TEMPFILE | grep $i | wc -l`
 
        if [ $LINECOUNT -eq 1 ]; then
            INFO=`cat $TEMPFILE | grep $i | awk '{print$1}'| sed 's/m//g' | sed 's/B//g'`
            INFO1=`cat $TEMPFILE | grep $i | awk '{print$6,$9}'`
            PROCINFO="0  $INFO $INFO1 $i"
                        echo "$PROCINFO" >> $RESULTFILE
 
        else
            PROCINFO="1 0 0 0 $i"
                        echo "$PROCINFO" >> $RESULTFILE
        fi
 
    done
 
# Not System
else
exit 0
fi
 
rm -f $TEMPFILE
 
exit 0

위 스크립트를 AS4의 쉘에서 실행을 시키면 잘 동작합니다.
그리고 test프로그램으로 단순히 system("shell");
만으로 실행하면 잘 동작하구요...

근데 이노무 snmp agent쪽 소스에선 스크립트를 실행하는데
항상 else 부분으로 해서 resultfile에

1 0 0 0 test
1 0 0 0 java

이런식으로만 찍히네요..

검색해보니 로그인쉘과 서브쉘 얘기도 나오고
PATH얘기도 나와서
agent쪽에서 스크립트의 한라인을 그래도 실행시켜보았습니다

system("top -u km192 -d 1 -n 1 > temp");

라구요..파일은 생성이 되는데 안에 내용이 하나도 없구요..
아 이 당황스러움..OTL....

지푸라기 잡는 심정으로다가 질문 올려봅니다..
혹 자그마한 실마리라도 제공해 주셨으면 합니다..
감사합니다..오늘도 행복한 하루 되세요~

bushi의 이미지

system("top -u km192 -d 1 -n 1 > temp 2>&1");

으로 원인을 알아보세요.

km192의 이미지

알려주신 방법대로 해보니
temp파일에

top: failed tty get

이라고만 찍혀있어서
해당 메세지로 검색해보니..데비안메일링 리스트에 관련된 내용이 있더군요
그래서 -b 옵션에 대해서 man page를 보고 해보니..제대로 동작을 하네요

그래서 다시 검색을 해보니
http://kldp.org/node/68659 에 이미 이전에 같은 문제로 고민을 하셨던 분이 있더군요..
아..top문제인줄은 꿈에도 몰랐습니다..
매번 나름 검색을 충분히 해본다고 해보는데도 이 모양이니
갈길이 멀군요...
댓글이 지푸라기가 아닌 금덩이였습니다..
감사합니다.....

댓글 달기

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