Разный разделитель в консоли и cron

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-08 17:07:48

День добрый.

Пишу маленький скрипт, наткнулся на одну фичу.

Так - прекрасно работает из консоли

Код: Выделить всё

 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.
Но все же хочется понять причину явления ...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение Alex Keda » 2011-08-08 20:04:47

засуньте в файл и запускайте файл
Убей их всех! Бог потом рассортирует...

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 7:32:31

Alex Keda писал(а):засуньте в файл и запускайте файл
Из файла и запускаю ...

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение skeletor » 2011-08-09 9:37:14

Та же самая проблема :) Если узнаете в чём причина - обязательно поделитесь.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-09 9:40:17

Покажите вывод

Код: Выделить всё

sysctl -a | grep dev.cpu.\*.temp
Пользователь один и тот же от кот. запускается крон и руками из консоли?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 9:47:38

kpp писал(а):Покажите вывод

Код: Выделить всё

sysctl -a | grep dev.cpu.\*.temp
Пользователь один и тот же от кот. запускается крон и руками из консоли?
В консоли запускаю под root.
А crontab правлю так: >crontab -u root -e

Т.е. crontab тоже пользователя root.

А что Вам даст вывод sysctl ?
В выводе из консоли разделитель ","

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-09 9:50:52

Нужно от чего-то оттолкнуться, если вы хотите разобраться.
Плпробуйте

Код: Выделить всё

sysctl -a | grep dev.cpu.\*.temp
в консоли и из крона: разделитель меняется?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 9:55:32

kpp писал(а):Нужно от чего-то оттолкнуться, если вы хотите разобраться.
Ну собственно в первом посте все изложено, как из консоли и как из cron.
Куски скрипта рабочие. т.е. в данный момент полный скрипт исправно работает через cron (3й вариант).

Извините, если Вам показалось что я грубо ответил. Ни чего не имел ввиду ...

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 9:57:06

kpp писал(а):Нужно от чего-то оттолкнуться, если вы хотите разобраться.
Плпробуйте

Код: Выделить всё

sysctl -a | grep dev.cpu.\*.temp
в консоли и из крона: разделитель меняется?
Да - меняется ))))
Про это и вопрос ))).

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-09 10:00:28

1. Как вариант прописать полные пути ко всем утилитам.
Что хотите отобрать этим грепом:

Код: Выделить всё

grep dev.cpu.\*.temp
Возможно нужно записать так:

Код: Выделить всё

grep "dev\.cpu\.\*\.temp"
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение dmtr » 2011-08-09 10:05:21

а скрипт одним и тем же интерпретатором обрабатывается? в консоли у рута например bash, а из крона он не sh запускается случайно?
This game has no name. It will never be the same.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 10:07:53

Грепом хочу отобрать это:

Код: Выделить всё

> sysctl -a | grep dev.cpu.\*.temp
dev.cpu.0.temperature: 67,0C
dev.cpu.1.temperature: 63,0C
Это вывод из консоли.

Так:

Код: Выделить всё

grep "dev\.cpu\.\*\.temp"
не работает - вывод из консоли пустой.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 10:08:46

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

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 10:10:23

Полные пути не помогают - проверял с ними, результат такой же.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-09 10:20:16

Значит дело в утилите sysctl и в переменных окружения, а именно в переменной десятичный разделитель.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-09 10:28:49

kpp писал(а):Значит дело в утилите sysctl и в переменных окружения, а именно в переменной десятичный разделитель.
Не в этом ли дело ?

Код: Выделить всё

/etc>>env | grep SHELL
SHELL=/bin/csh

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-09 10:30:15

Переменная окружения LC_NUMERIC

Код: Выделить всё

locale -k decimal_point
LC_NUMERIC нужно установить в начале скрипта
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-10 8:40:17

2 kharkov_max
Ну так как? Решилось все?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-10 11:42:15

kpp писал(а):2 kharkov_max
Ну так как? Решилось все?
По идее Ваше предположение верно.

1. Подскажите пожалуйста как правильно изменить значение переменной через sh скрипт... (пока еще ни разу так не делал ...)
2. Нужно ли после изменения и выполения скрипта это значение вернуть назад в первоначальное состояние ?
3. Все таки каким образом при работе через консоль значение одно, а через cron другое, хотя пользователь один и тот же (причина) ?

Спасибо.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-10 11:50:06

Например:

Код: Выделить всё

export LC_NUMERIC="ru_RU.KOI8-R"
Тогда десятичный разделитель будет запятая.
Возвращать назад не нужно.
Каждый скрипт (если он не запускается как ". скрипт" ) запускается в своем собственном экземпляре шелла, при запуске шелла инициализируются переменные окружения, переменные локали.
Если начальный логин под одним пользователем, а потом получение прав другого пользователя (через su) переменные окружения передаются всем порожденным шеллам.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение f_andrey » 2011-08-10 12:12:10

kpp писал(а):Если начальный логин под одним пользователем, а потом получение прав другого пользователя (через su) переменные окружения передаются всем порожденным шеллам.
А если запустить su правильно, то он сделает всё что надо с окружением ;)
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Аватара пользователя
kharkov_max
капитан
Сообщения: 1853
Зарегистрирован: 2008-10-03 14:56:40

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kharkov_max » 2011-08-10 12:14:21

kpp писал(а):Например:

Код: Выделить всё

export LC_NUMERIC="ru_RU.KOI8-R"
А как глобально применить ?
Что б в скриптах не прописывать ?

В rc.conf у меня есть:

Код: Выделить всё

font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
scrnmap="koi8-r2cp866"
keyrate="fast"

# clear_tmp_enable="YES"
keymap="ru.koi8-r"

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-11 11:23:55

После успешной регистрации выполняются файлы среды:
/etc/profile и .profile из домашнего каталога пользователя.
В пользовательском .profile можно прописать:

Код: Выделить всё

LC_NUMERIC="ru_RU.KOI8-R"
export LC_NUMERIC
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение Alex Keda » 2011-08-19 8:17:20

э... понял.
я в таких случаях прилепляю 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# 
Убей их всех! Бог потом рассортирует...

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Разный разделитель в консоли и cron

Непрочитанное сообщение kpp » 2011-08-19 10:26:30

Что за запись такая?

Код: Выделить всё

work/high.LA.notify.sh:la="`sysctl vm.loadavg | awk '{print $3}' | tr ',' '.' | awk -F '.' '{print $1}'`"
work/high.LA.notify.sh - это скрипт, а как интерпретируется за именем скрипта двоеточие ?
Не встречал такого.
Скрипту передается уже проициализированная переменная la ?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.