[완료] cron을 통한 메일 전송 질문

bjlee72의 이미지

안녕하세요?
bash에서 다음과 같은 셸 스크립트를 작성했습니다.
문제는 이 스크립트를 root 계정에서 실행하면 잘 돌아간다는 점인데...
cron에 걸어놓으면 무슨 일인지 메일 내용은 잘 만들어지는데
메일은 안보내집니다. 메일은 nail 프로그램으로 보내는데요...

고수께 조언을 구하고자 이렇게 포스팅 해 봅니다. :-)

#!/bin/bash
 
TODAY=`date`
 
find /sharedocs/2009년도-자료/ > /root/sharedocs.list.new
 
if [ -e /root/sharedocs.list ]
then
        diff --suppress-common-lines /root/sharedocs.list.new /root/sharedocs.list > /root/sharedocs.list.diff
        awk '{ if ($1 == "<") { print; print "\n" } }' /root/sharedocs.list.diff > /root/sharedocs.list.diff2
        lines=`wc -l /root/sharedocs.list.diff2 | awk '{print $1}'`
        if [ $lines -gt 0 ]
        then
#               cat /root/sharedocs.list.diff2
                cat /root/sharedocs.header > /root/sharedocs.mail
                cat /root/sharedocs.list.diff2 >> /root/sharedocs.mail
                cat /root/sharedocs.footer >> /root/sharedocs.mail
 
                /bin/env MAILRC=/dev/null from=bjlee@foo.bar.com smtp=smtp.foo.bar smtp-auth-user=bjlee smtp-auth-password=foobarpw smtp-auth=login /usr/bin/nail -n -s "NAS 서버에 새롭게 업로드된 파일 목록입니다. ($TODAY)" <a href="mailto:5323@foo.bar.com" rel="nofollow">5323@foo.bar.com</a> < /root/sharedocs.mail
        fi
fi
mv -f /root/sharedocs.list.new /root/sharedocs.list
rm -f /root/sharedocs.list.diff*
phonon의 이미지

작성하신 쉘의 이름을 "run_cron.sh"이라고 하면,
$> chmod 4777 run_cron.sh

위의 4777중 4의미는 모든 유저아이디에 root의 실행권한을 주는 겁니다.
->2777은 모든 그룹에 root의 실행권한
->6777은 모든 유저/그룹에 권한 부여

bjlee72의 이미지

chmod 4755 list.sh와 같이 하여 테스트를 해 보았습니다.
근데 안되더군요. ㅋㅋ
뭐가 문제일까요?

Byungjoon Lee, http://www.buggymind.com

Byungjoon Lee, http://www.buggymind.com

phonon의 이미지

cron을 설치하실 때 root권한으로 하신 듯 합니다.
작성하신 쉘을 직접 실행시에 문제가 없던 것은 root환경변수에 cron디렉토리가 설정되어 있어서 문제가 없다가 데몬에서 실행할 때는 cron관련디렉토리들에 대한 접근권한이나 환경변수 설정이 맞지 않아서 발생한 가능성이 높군요.

ymir의 이미지

cron 에서 shell script 를 실행할 때 주의 해야 하는게..
PATH 와 환경 변수 입니다.
특히 스크립트내의 명령에서 별도로 참조해야 하는 환경변수가 있다면..
정확하게 일일이 export 해주셔야 합니다.

mail 에서는 HOME, LOGNAME, USER, SHELL, DEAD, PAGER, LISTER, EDITOR, VISUAL, REPLYTO MAIL, MAILRC, and MBOX 와 같은 환경 변수를 참조하는데, nail 은 어떤지 모르겠네요.

그 외에 syslog 에 crond 에서 로그를 찍도록 해서, 정상 실행 여부를 확인해 보시고..
단계별로 로그를 찍어서 어느 라인의 명령을 수행하다 멈췄는지 확인해 보시는 게 좋을 것 같습니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

ktd2004의 이미지

제 경험으로는 cron에 문제가 생길때는 거의 PATH 문제더군요.
그냥 실행할 때와, cron에서 실행될때의 PATH 문제.

이상은 제 경험이었습니다.

bjlee72의 이미지

많은 분들의 조언 감사합니다.
답은 실행 권한도 아니고, PATH 문제도 아니었습니다.
ymir 님의 조언대로 로그를 찍어봤는데...

export LANG=ko_KR.euckr을 안한 것이 문제더군요. -_-;
LANG이 cron은 기본적으로 영문 모드로 실행하는 모양인데...
그 상태에서 한글이 포함된 메시지를 보내려고 하면
메일을 못 보내고 dead.letter에 저장하더군요.

해결되었습니다.
감사합니다.

Byungjoon Lee, http://www.buggymind.com

Byungjoon Lee, http://www.buggymind.com

댓글 달기

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