[solved] LC_NUMERIC

Ломаю голову, как такое может быть:

Имеем сервер с вот такой локалью:

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, ну и далее по всем числам.

Куда копать?

Не могу сказать с

Не могу сказать с уверенностью, но возможно когда вы запускаете скрипт ручками, и когда из крона, это происходит от имени разных пользователей? Может сюда копнуть?

Я типичный русский колхозник.
Долго запрягаю, быстро езжу и сильно торможу...

возможно

я запускаю рутом, файл принадлежит апачу, а в кроне написано запускать от рута.
Вроде бы должен от рута делать

Проверьте, правильно ли

Проверьте, правильно ли выставлены параметры среды при запуске от крона.

а как это сделать,

а как это сделать, технически?

крон запускает задачи из-под рута (так написано в кронтабе) и в бин/баш. Точно так же делаю и я руками, но результат разный.
Кроме как недоумения у меня это не вызывает.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

Далее, немного погуглив, решил сделать "правильно", а именно, отредактировать кронтаб не редактором, а командой crontab -e
В /var/spool/cron/ появился файл root задача выполнилась явно от его имени, о чем пришло уведомление на почту. Но числа распознались неверно.

Очень нужна помощь!

Какое тут может быть

Какое тут может быть недоумение?! Это Юникс! Среды всегда разные, вопрос только насколько... и имя пользователя - это только один из параметров... :)
Вставь в скрипт выдачу переменных среды в файл и посмотри потом.

Создал скрипт с командой env

Создал скрипт с командой env > file , т.к. использую виртуалку с центОС'ом
вывод скрипта кроном

SHELL=/bin/bash
MAILTO=root
OLDPWD=/
USER=root
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PWD=/var/tasks
HOME=/
SHLVL=2
LOGNAME=root
_=/bin/env

вывод ./script и вывод этой команды с консоли отличаются между собой только значение переменной SHVL - погуглил: это не важно.

HOSTNAME=**.com
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=*****
OLDPWD=/var/tasks
SSH_TTY=/dev/pts/2
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/phpfpm/bin
MAIL=/var/spool/mail/root
PWD=/var/tasks
LANG=ru_RU.UTF-8
HISTCONTROL=ignoredups
HOME=/root
SHLVL=2
LOGNAME=root
SSH_CONNECTION=*****
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env

А так вижу различия в домашней директории, и отсутствии указанного терминала.

1. не надо понимать так

1. не надо понимать так буквально, т.е. среда != env :). у вас проблемы с локалью - ее и выводите. Но вы позже сами догадались, вижу.
2. не надо создавать отдельный скрипт, а для чистоты эксперимента надо в нужном месте (прямо перед командой, которая работает неправильно) вставить контрольную выдачу.

А как локаль прописана?

А как локаль прописана?

Working on Gentoo Linux for Asus P535 and Qtopia :-)

как я уже говорил, это

как я уже говорил, это ЦентОС, поэтому локаль прописана в /etc/sysconfig/i18n

LANG="ru_UA.UTF-8"
SYSFONT="latarcyrheb-sun16"

по поводу локали есть вопрос: надо после этого перегружать комп?

Аналога env-update не нашел, source /etc/profile делал.

все, а нешел причину, если

все, а нешел причину, если запустить скрипт с командой locale > file выдает

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=

Спасибо за помощь. Тему пока не закрываю, т.к. не могу перезагрузить сервер - он живой. Сегодня ночью ребутну его и отпишусь.

Решено на 3/4

Решено банально, но, ведь, решено!
nano -w /etc/crontab
и втавляем:

LANG="ru_UA.UTF-8"

Это было довольно занятно, можно сказать что получит +1 к локализации :)

Но! было бы интересно довести дело до конца: а именно понять, почему крон берет локаль по-умолчанию Posix.
Курение манов, пока привело к результату, который я и использовал.
Но, хотелось бы решить эту задачу раз и навсегда, т.е. поднимаю новый сервер - меняю локаль оболочки и сразу же крона.

.

kostik_g написал(а):
Но! было бы интересно довести дело до конца: а именно понять, почему крон берет локаль по-умолчанию Posix.

А у cron'а вообще по умолчанию набор (и значения) переменных сильно зарезан относительно ординарного пользователя.

:wq
--
Live free or die

Т.е. мое решение является

Т.е. мое решение является законченным а не "костылем"? и тему можно закрывать?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".