모니터링 스크립트를 하나 만들었는데 그냥 실행하면 괜잖은데 cron등록하면 문제가 생깁니다...
가끔 프로세스가 죽거나 defunct가 생기는 경우가 있어서 문제가 발생하면
메일로 메시지를 보내게끔 간단한 프로세스 모니터링 쉘을 만들었습니다.
sh mon.sh 실행하면 제대로 메일이 들어오는데 cron에 등록시켜서 1분마다 돌아가게끔 해뒀는데
이상하게 cron에 등록해두면 제대로 메일이 발송되지 않습니다.
제가 잘못 작성한건지... cron에 등록할 쉘은 다른식으로 해야되는지 잘 모르겠네요
조잡한 스크립트지만 전문가분들의 조언 부탁드립니다.
---------------------------------------------
#!/bin/bash
#daemon PID
ps -C processname > /root/processname_ps.log
KR_PID=`ps -C processname -o pid= | head -n1`
DEFUNCT_PID=`grep defunct /root/processname_ps.log | cut -f 1 -d " " | head -n1`
C_DATE=`date "+%Y-%m-%d %H:%M:%S"`
#HOST_NAME=`processname`
#admin email
MAIL_TO=XXXXXXX@gmail.com
#sender email
MAIL_FROM="processname@xxx.xx.xx"
#email content
MAIL_CONTENT="Return-Path: <$MAIL_FROM>
From: <$MAIL_FROM>
To: $MAIL_TO
Subject: [processname] processname process error!!!!!!.[$C_DATE]
MIME-Version: 1.0
Content-Type: text/html; charset=euc-kr
date : $C_DATE
write : Whois Daemon Monitor
process error
."
# $WHOIS_PID = 0
if [ $KR_PID ];
then
echo "-----down-----"
echo $KR_PID
echo "[$C_DATE] process down ." >> /var/log/processname .log
echo -e "$MAIL_CONTENT" | sendmail -f $MAIL_FROM $MAIL_TO
elif [ $DEFUNCT_PID ];
then
echo "-----defunct-----"
echo $DEFUNCT_PID
echo "[$C_DATE] process defunt ." >> /var/log/processname .log
echo -e "$MAIL_CONTENT" | sendmail -f $MAIL_FROM $MAIL_TO
fi
얼핏 봤을 때 문제 하나는
얼핏 봤을 때
C_DATE=`date "+%Y-%m-%d %H:%M:%S"`
이런 식으로 하면 cron에서 돌릴 때 문제가 생길 겁니다.
cron이 %를 특수한 용도로 사용하기 때문이라고 알고 있습니다.
% 앞에 \를 붙여서 테스트해보시죠.
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
export PATH= 알아서..
를 추가도 해보세요.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
두 분 조언대로 해봤는데 잘 안되네요... 로그를
두 분 조언대로 해봤는데 잘 안되네요...
로그를 보니
echo -e "$MAIL_CONTENT" | sendmail -f $MAIL_FROM $MAIL_TO
이부분에서 sendmail 에러가 발생합니다.
그냥 실행했을때는 잘 되는데 cron에 등록했을때 sendmail 에러가 나는건 왜일까요..ㅜ.ㅜ
어떤 에러인지는 알수 없을까요? 제가 보기에도 문제는
어떤 에러인지는 알수 없을까요? 제가 보기에도 문제는 없어 보이는데......
아니면 echo 내용을파일로 보내고 그 파일을 sendmain 로 보내면 얼떨까요?
Gnu is Not Unix
음 ..
잘 동작하는 script 가 cron 에서 문제를 일으키는 경우는 대부분 환경변수 때문입니다.
특히나 PATH 가 그렇고, 그 외에 로그인 쉘의 환경 변수를 사용하는 프로그램들이 그렇습니다.
sendmail 에서 사용하는 환경변수가 따로 있는지 확인해 보세요.
syslog 에서 cron 과 관련된 로그가 있는지 확인해 보시고..
sendmail 의 stdout, stderr 를 다른 파일에 적어두거나 해서 실행 결과를 직접 확인해 볼 수도 있을 것입니다.
아니면 cron 에 등록하면서 위 스크립트의 stdout, stderr 를 redirect 하도록 할 수도 있구요..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기