[solved] LC_NUMERIC
kostik_g 23 апреля, 2012 - 18:42
Ломаю голову, как такое может быть:
Имеем сервер с вот такой локалью:
LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL=
имеем явовский скрипт, который берет данные из экселя и вставляет их в MySQL
Проблема: если скрипт вызывать руками - все норм, если через крон, сбиваются настройки LC_NUMERIC, а именно, вместо 1700 получается 1,7, ну и далее по всем числам.
Куда копать?
»
- Для комментирования войдите или зарегистрируйтесь
Не могу сказать с
Не могу сказать с уверенностью, но возможно когда вы запускаете скрипт ручками, и когда из крона, это происходит от имени разных пользователей? Может сюда копнуть?
Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...
возможно
я запускаю рутом, файл принадлежит апачу, а в кроне написано запускать от рута.
Вроде бы должен от рута делать
Проверьте, правильно ли
Проверьте, правильно ли выставлены параметры среды при запуске от крона.
а как это сделать,
а как это сделать, технически?
крон запускает задачи из-под рута (так написано в кронтабе) и в бин/баш. Точно так же делаю и я руками, но результат разный.
Кроме как недоумения у меня это не вызывает.
Далее, немного погуглив, решил сделать "правильно", а именно, отредактировать кронтаб не редактором, а командой crontab -e
В /var/spool/cron/ появился файл root задача выполнилась явно от его имени, о чем пришло уведомление на почту. Но числа распознались неверно.
Очень нужна помощь!
Какое тут может быть
Какое тут может быть недоумение?! Это Юникс! Среды всегда разные, вопрос только насколько... и имя пользователя - это только один из параметров... :)
Вставь в скрипт выдачу переменных среды в файл и посмотри потом.
Создал скрипт с командой env
Создал скрипт с командой env > file , т.к. использую виртуалку с центОС'ом
вывод скрипта кроном
вывод ./script и вывод этой команды с консоли отличаются между собой только значение переменной SHVL - погуглил: это не важно.
А так вижу различия в домашней директории, и отсутствии указанного терминала.
1. не надо понимать так
1. не надо понимать так буквально, т.е. среда != env :). у вас проблемы с локалью - ее и выводите. Но вы позже сами догадались, вижу.
2. не надо создавать отдельный скрипт, а для чистоты эксперимента надо в нужном месте (прямо перед командой, которая работает неправильно) вставить контрольную выдачу.
А как локаль прописана?
А как локаль прописана?
Working on Gentoo Linux for Asus P535 and Qtopia :-)
как я уже говорил, это
как я уже говорил, это ЦентОС, поэтому локаль прописана в /etc/sysconfig/i18n
по поводу локали есть вопрос: надо после этого перегружать комп?
Аналога env-update не нашел, source /etc/profile делал.
все, а нешел причину, если
все, а нешел причину, если запустить скрипт с командой locale > file выдает
Спасибо за помощь. Тему пока не закрываю, т.к. не могу перезагрузить сервер - он живой. Сегодня ночью ребутну его и отпишусь.
Решено на 3/4
Решено банально, но, ведь, решено!
nano -w /etc/crontab
и втавляем:
LANG="ru_UA.UTF-8"
Это было довольно занятно, можно сказать что получит +1 к локализации :)
Но! было бы интересно довести дело до конца: а именно понять, почему крон берет локаль по-умолчанию Posix.
Курение манов, пока привело к результату, который я и использовал.
Но, хотелось бы решить эту задачу раз и навсегда, т.е. поднимаю новый сервер - меняю локаль оболочки и сразу же крона.
.
А у cron'а вообще по умолчанию набор (и значения) переменных сильно зарезан относительно ординарного пользователя.
:wq
--
Live free or die
Т.е. мое решение является
Т.е. мое решение является законченным а не "костылем"? и тему можно закрывать?