Страница 1 из 2
Разный разделитель в консоли и cron
Добавлено: 2011-08-08 17:07:48
kharkov_max
День добрый.
Пишу маленький скрипт, наткнулся на одну фичу.
Так - прекрасно работает из консоли
Код: Выделить всё
sysctl -a | grep dev.cpu.\*.temp | awk -F" " '{print $2}' | awk -F"," '{print $1}' | while read cpu; do
if [ $cpu -gt $crit_cpu_temp ]; then
echo "Critical CPU temperature CPU_temp=$cpu" >> $log
echo "" >> $log
echo 1 > $file_monitor_log_flag
fi
done
Но не работает через cron т.к если запускать через cron то разделителем 2го awk будет "."
Т.е. через cron работает так:
Код: Выделить всё
sysctl -a | grep dev.cpu.\*.temp | awk -F" " '{print $2}' | awk -F"." '{print $1}' | while read cpu; do
if [ $cpu -gt $crit_cpu_temp ]; then
echo "Critical CPU temperature CPU_temp=$cpu" >> $log
echo "" >> $log
echo 1 > $file_monitor_log_flag
fi
done
но не работает из консоли ...
Естесственно скрипт иногда придется запускать руками.
Пока выкрутился так:
Код: Выделить всё
sysctl -a | grep dev.cpu.\*.temp | awk -F" " '{print $2}' | awk -F"," '{print $1}' | awk -F"." '{print $1}' | while read cpu; do
if [ $cpu -gt $crit_cpu_temp ]; then
echo "Critical CPU temperature CPU_temp=$cpu" >> $log
echo "" >> $log
echo 1 > $file_monitor_log_flag
fi
done
Работает и через консоль и из cron.
Но все же хочется понять причину явления ...
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-08 20:04:47
Alex Keda
засуньте в файл и запускайте файл
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 7:32:31
kharkov_max
Alex Keda писал(а):засуньте в файл и запускайте файл
Из файла и запускаю ...
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 9:37:14
skeletor
Та же самая проблема

Если узнаете в чём причина - обязательно поделитесь.
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 9:40:17
kpp
Покажите вывод
Пользователь один и тот же от кот. запускается крон и руками из консоли?
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 9:47:38
kharkov_max
kpp писал(а):Покажите вывод
Пользователь один и тот же от кот. запускается крон и руками из консоли?
В консоли запускаю под root.
А crontab правлю так: >crontab -u root -e
Т.е. crontab тоже пользователя root.
А что Вам даст вывод sysctl ?
В выводе из консоли разделитель ","
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 9:50:52
kpp
Нужно от чего-то оттолкнуться, если вы хотите разобраться.
Плпробуйте
в консоли и из крона: разделитель меняется?
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 9:55:32
kharkov_max
kpp писал(а):Нужно от чего-то оттолкнуться, если вы хотите разобраться.
Ну собственно в первом посте все изложено, как из консоли и как из cron.
Куски скрипта рабочие. т.е. в данный момент полный скрипт исправно работает через cron (3й вариант).
Извините, если Вам показалось что я грубо ответил. Ни чего не имел ввиду ...
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 9:57:06
kharkov_max
kpp писал(а):Нужно от чего-то оттолкнуться, если вы хотите разобраться.
Плпробуйте
в консоли и из крона: разделитель меняется?
Да - меняется ))))
Про это и вопрос ))).
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:00:28
kpp
1. Как вариант прописать полные пути ко всем утилитам.
Что хотите отобрать этим грепом:
Возможно нужно записать так:
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:05:21
dmtr
а скрипт одним и тем же интерпретатором обрабатывается? в консоли у рута например bash, а из крона он не sh запускается случайно?
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:07:53
kharkov_max
Грепом хочу отобрать это:
Код: Выделить всё
> sysctl -a | grep dev.cpu.\*.temp
dev.cpu.0.temperature: 67,0C
dev.cpu.1.temperature: 63,0C
Это вывод из консоли.
Так:
не работает - вывод из консоли пустой.
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:08:46
kharkov_max
dmtr писал(а):а скрипт одним и тем же интерпретатором обрабатывается? в консоли у рута например bash, а из крона он не sh запускается случайно?
Код: Выделить всё
> crontab -u root -l
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
# min hour mday month wday who command
......
.......
Все sh
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:10:23
kharkov_max
Полные пути не помогают - проверял с ними, результат такой же.
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:20:16
kpp
Значит дело в утилите sysctl и в переменных окружения, а именно в переменной десятичный разделитель.
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:28:49
kharkov_max
kpp писал(а):Значит дело в утилите sysctl и в переменных окружения, а именно в переменной десятичный разделитель.
Не в этом ли дело ?
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-09 10:30:15
kpp
Переменная окружения LC_NUMERIC
LC_NUMERIC нужно установить в начале скрипта
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-10 8:40:17
kpp
2 kharkov_max
Ну так как? Решилось все?
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-10 11:42:15
kharkov_max
kpp писал(а):2 kharkov_max
Ну так как? Решилось все?
По идее Ваше предположение верно.
1. Подскажите пожалуйста как правильно изменить значение переменной через sh скрипт... (пока еще ни разу так не делал ...)
2. Нужно ли после изменения и выполения скрипта это значение вернуть назад в первоначальное состояние ?
3. Все таки каким образом при работе через консоль значение одно, а через cron другое, хотя пользователь один и тот же (причина) ?
Спасибо.
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-10 11:50:06
kpp
Например:
Тогда десятичный разделитель будет запятая.
Возвращать назад не нужно.
Каждый скрипт (если он не запускается как ". скрипт" ) запускается в своем собственном экземпляре шелла, при запуске шелла инициализируются переменные окружения, переменные локали.
Если начальный логин под одним пользователем, а потом получение прав другого пользователя (через su) переменные окружения передаются всем порожденным шеллам.
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-10 12:12:10
f_andrey
kpp писал(а):Если начальный логин под одним пользователем, а потом получение прав другого пользователя (через su) переменные окружения передаются всем порожденным шеллам.
А если запустить su правильно, то он сделает всё что надо с окружением

Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-10 12:14:21
kharkov_max
А как глобально применить ?
Что б в скриптах не прописывать ?
В rc.conf у меня есть:
Код: Выделить всё
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
scrnmap="koi8-r2cp866"
keyrate="fast"
# clear_tmp_enable="YES"
keymap="ru.koi8-r"
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-11 11:23:55
kpp
После успешной регистрации выполняются файлы среды:
/etc/profile и .profile из домашнего каталога пользователя.
В пользовательском .profile можно прописать:
Код: Выделить всё
LC_NUMERIC="ru_RU.KOI8-R"
export LC_NUMERIC
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-19 8:17:20
Alex Keda
э... понял.
я в таких случаях прилепляю tr
Код: Выделить всё
srv0# grep -R "tr '" *
work/high.LA.notify.sh:la="`sysctl vm.loadavg | awk '{print $3}' | tr ',' '.' | awk -F '.' '{print $1}'`"
work/ddos.detect.sh:la_full="`sysctl vm.loadavg | awk '{print $3}' | tr ',' '.'`"
srv0#
Re: Разный разделитель в консоли и cron
Добавлено: 2011-08-19 10:26:30
kpp
Что за запись такая?
Код: Выделить всё
work/high.LA.notify.sh:la="`sysctl vm.loadavg | awk '{print $3}' | tr ',' '.' | awk -F '.' '{print $1}'`"
work/high.LA.notify.sh - это скрипт, а как интерпретируется за именем скрипта двоеточие ?
Не встречал такого.
Скрипту передается уже проициализированная переменная la ?