Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Проблема с автоматизцией скрипта через crontab. Кодировка!!![Решено]  (Прочитано 6011 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
У меня написан скрипт отправляющий смс мне на телефон. В теле смс русские символы, которые берутся с xml файла.
<?php
$xml 
simplexml_load_file("$site");

foreach ( 
$xml as $text ) {
  
$message $text
  
$phone $text[phone];

  `
echo "$message" |gnokii --sendsms $phone`;
}
?>

Когда я выполняю скрипт с консали руками:
php xml.phpвсе работает безукоризненно.
Задаю задание crontab
0 18 * * * root php /home/phil/xml.phpтекст приходит знаками вопроса или квадратами.

Подскажите куда копать. В чем может быть проблема?

Причем данные с инета тянуться нормально, если их записать в текстовый файл >loq.txt, то можно заметить что с кодировкой тут все нормально.

Но вот на телефон приходят квадраты и знаки вопроса, числа и знаки нормально приходят. Проблема только с русскими буквами. Понятно, что дело в кодировке.
Я думаю, что дело в строчке
`echo "$message" |gnokii --sendsms $phone`;
Вопрос: чем же отличается ввод команды php xml.php руками в консоли от работы cron?
« Последнее редактирование: 07 Июля 2009, 12:24:12 от Владимир Николаевич »

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Подозреваю, что в установках locale. Задания в crontab не имеют настроек рабочего окружения, в котором работаешь ты.

Пропиши в скрипт выдачу locale и посмотри. Возможно нужно установить какие-нибудь связанных с locale переменных перед исполнением твоего php скрипта.

Могу быть не прав.

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
вот вывод:
root@phil-laptop:~# locale
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=
В установках locale моего пользователя
phil@phil-laptop:~$ printenv|grep LANG
LANG=ru_RU.UTF-8
GDM_LANG=ru_RU.UTF-8
рута
root@phil-laptop:~# printenv|grep LANG
LANG=ru_RU.UTF-8
crontab в принципе должен же из под рута работать? или у него своя локаль?

Кстати GDM_LANG= у рута нет, может в этом проблема?
« Последнее редактирование: 03 Июля 2009, 23:18:51 от _phil_ »

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
ЕМНИП, задания в crontab не наследуют переменных окружения. В них, по хорошему, даже полные пути нужно использовать.

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --repo$
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --repo$
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --repo$

29 21    * * *  phil    /bin/bash /home/phil/test.sh
#
Вот мой crontab. Может тут что не так. А как можно определить для cron переменные окружения?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
полагаю что после PATH=... надо написать еще
LANG=ru_RU.UTF-8

Хотя system wide лучше не редактировать. В своём test.sh первым делом пропиши строчку
export LANG=ru_RU.UTF-8

должно помоч

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
полагаю что после PATH=... надо написать еще
LANG=ru_RU.UTF-8

Хотя system wide лучше не редактировать. В своём test.sh первым делом пропиши строчку
export LANG=ru_RU.UTF-8

должно помоч

спасибо тебе друг!!! вчера просидел до 2-х ночи - все, что умел, все попробовал. Не знал, что можно прямо в crontab локаль прописать. В общем помогло.
Спасибо так же, Kwah, Вы были правы ))))

 

Страница сгенерирована за 0.083 секунд. Запросов: 25.