LINUX.ORG.RU
решено ФорумAdmin

скрипт не работает в crontab


1

1

Всем привет помогите с граблями

есть скрипт (скрипт в разработке сильно не пинайте) который пересылает показания датчика температуры сервера на почту админу:


send_mail ()
{
DATE=`date '+%Y-%m-%d'`
TIME=`date '+%H:%M:%S'`
recp=user1@domain.com,user2@domain.com
subj=`echo !!!WARNING!!! Температура в серверной привышает норму | iconv -t cp1251`
echo Текущая дата и время $DATE $TIME Температура воздуха в серверной $temp по Цельсию !!!Выключите все сервера!!! | iconv -t KOI8-R | mail -s "$subj" $recp
}

# Проверяем температуру за бортом сервера hp dl380g7
# Подключаемся к ILO3 и снимаем показания датчика температуры окружающей среды
temp=`ipmitool -I lanplus -U User -P Pass -H 192.168.1.196 sdr type Temperature | grep "0Dh" | rev | cut -c1-12 | rev | cut -c1-2`;
if [ "$temp" -ge 23 ];
        then
        send_mail
fi;

так вот скрипт отлично обрабатывает но если его запустить кроном категорически не шлет кириллицей то есть не работает iconv -t, подскажите почему?

Локали в кроне = системная локаль. Или «C».

«iconv -f utf-8 -t cp1251» может и спасет (не проверял).

А лучше локаль в начале скрипта выставить.

sergv ()
Ответ на: комментарий от fordiego

еслиб я еще знал как посмотреть какую локаль использует cron..... )))

а какой crontab? вопрос поставлен потому, что на самом деле, у каждого юзера crontab свой. ИЧСХ, обычно пихают всё в рутовый, а у рута обычно LC_ALL=C.

drBatty ★★ ()
Ответ на: комментарий от drBatty

я захожу по рутом на сервак, с консоли набираю crontab -e

я так понимаю вызываю рутовый крон

fordiego ()
Ответ на: комментарий от fordiego

fordiego

ну запускаю крон я так

crontab -e

я так понимаю что рутовый

от имени какого юзера? попробуйте выполнить в cron команду

locale 2>&1 >/tmp/locale.txt
скажем каждую минуту. ну и файл этот посмотрите...

drBatty ★★ ()
Ответ на: комментарий от drBatty

да, локали - это часть окружения, и они НЕ устанавливаются для крона:

       Nor  does it do any special environment handling.  A shell script is better-suited to doing that than a cron daemon.  This cron daemon
       sets up only three environment variables: USER, HOME, and SHELL.

drBatty ★★ ()
Ответ на: комментарий от fordiego

это в консоли набирал

а в cron это будет «пусто», т.е. LC_ALL=C

drBatty ★★ ()
Ответ на: комментарий от drBatty

вот что на выходе

LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

fordiego ()
Ответ на: комментарий от sergv

добавил в голову

LANG=ru_RU.UTF-8 export LANG

УРАААААААА!!!!!!! Спасибо!!!! Все приходит кирилицей! Отлично! Пойду дальше пилить! )))

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