LINUX.ORG.RU
ФорумAdmin

Нужен совет по bash


0

0

Привет всем. Нужен ваш совет по такому вопросу:
есть скрипт post-commit (для subversion), который имеет следующий вид:
#!/bin/sh
#=================Variables==============================
TMP_MESSAGE=/tmp/repos_post-commit.txt
ndate=`date +%F`
ndate2=`date`
ADMIN_EMAIL=admin@example.com
#--------------------------------------------------------

YANGEST=`svnlook youngest /var/www/localhost/svn/repos`
REV_NUMBER=`svnlook changed -r $YANGEST /var/www/localhost/svn/repos`
AUTHOR=`svnlook author /var/www/localhost/svn/repos`

cat <<EOF > $TMP_MESSAGE
Tuday ($ndate) has been updated repository repos.
Author - $AUTHOR
revision number - $YANGEST
file changed -
$REV_NUMBER
EOF

cat $TMP_MESSAGE | biabam $TMP_MESSAGE -s "SVN - repository repos changed [$ndate2]" $ADMIN_EMAIL

Проблемма какая - не выполняется последняя строка, ради которой все и затевалось. Откуда я знаю, что скрип выполняется - файл $TMP_MESSAGE создается. И самое интересное - когда ручками запускаешь етот скрипт - то письмо приходит!!!
Подскажите, куда копать. В логах пусто (правда, когда ручками запускаешь, то в mail.log запись все таки появляется).
Владелец скрипта - апач. Может ему прав не хватает для отправки письма? Что можно сделать? Каким еще способом можна отправить письмо из скрипта?
Заранее благодарен за ответ.


Re: Нужен совет по bash

> Каким еще способом можна отправить письмо из скрипта? 

#!/usr/bin/expect -f
## v.0.2 2005-02-18

set FILE_RESULT "/root/bin/schetchiki/result";
set string "empty =)";

spawn telnet X.X.X.X 25
set timeout 15

expect {
    "glad to see you!"  {}
    timeout             { puts "\r\[ TROUBLE \] Can't connect to mailserver.ratelecom.net\r"; exit 1; }
}

send -- "mail from: support@YYYYYY.ru\r"
expect {
    "250"               {}
    timeout             { puts "\r\[ TROUBLE \] mail from: invalid server response\r"; send -- "quit\r"; exit 2; }
}

send -- "rcpt to: ZZZZZZZZ@mail.ru\r"
send -- "rcpt to: support@dXXXXXXX.ru\r"
expect {
    "250"               {}
    timeout             { puts "\r\[ TROUBLE \] rcpt to: invalid server response\r"; send -- "quit\r"; exit 3; }
}

send -- "data\r"
expect {
    "354"               {}
    timeout             { puts "\r\[ TROUBLE \] data: invalid server response\r"; send -- "quit\r"; exit 4; }
}

send -- "From: \"Tehsluzhba YYYYYYY\" <support@YYYYYYYY.ru>\r";
send -- "To: XXXXXX@mail.ru, support@YYYYYYYYY.ru\r";
send -- "Subject: BBBBBBBBBBBBBBBB\r\r";

set f [ open $FILE_RESULT r ]
while { [ gets $f string ] >=0 } {
    send -- "$string\r";
}
close $f

send -- ".\r"
expect {
    "250"               {}
    timeout             { puts "\r\[ TROUBLE \] EOF: invalid server response\r"; exit 3; }
}

send -- "quit\r"
expect {
    "221"               {}
    timeout             { puts "\r\[ TROUBLE \] EOF: invalid server response\r"; exit 3; }
}

exit 0;

boatman ()
Ответ на: Re: Нужен совет по bash от boatman

Re: Нужен совет по bash

поясню. тоже надо было логи отправлять письмом по крону. пробовал

mail -s SUBJ -a FILE и т.д. - наткнулся на грабли - если простой текст, то все отлично, если встречаются тире, точки, @ и прочее -- письмо нормально в аутглюке, KMail'e и других не распознается нормально. Конечно всегда можно было посмотреть на исходники письма и все увидеть, но ориентировано было на людей, далёких от этого.

перебрал еще нескольео вариантов. не понравилось.

пришлось использовать expect и эмулировать себя любимого за консолью. скрипт работает на ура.

boatman ()
Ответ на: Re: Нужен совет по bash от boatman

Re: Нужен совет по bash

Спасибо, буду разбиратся.
Что самое интересное - заменил последнюю строку:

cat $TMP_MESSAGE | biabam $TMP_MESSAGE -s "SVN - repository repos changed [$ndate2]" $ADMIN_EMAIL

на

cat $TMP_MESSAGE | mail -s "SVN - repository repos changed [$ndate2]" "$ADMIN_EMAIL"

и все заработало!

Sirko ()
Ответ на: Re: Нужен совет по bash от Sirko

Re: Нужен совет по bash

Чаще всего такое происходит из-за того, что переменная PATH имеет разные значения у пользователя и в том окружении, где запускается скрипт. Решение - указывать полный путь к исполняемым программам. Либо в скрипте определять PATH.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.