Некорректно работаю скрипты, запущенные из crona

Игорёк

Новичок
Некорректно работаю скрипты, запущенные из crona

По какой-то непонятной причине скрипты,
которые запускаются из cron'а, перестали
подключаться к mysql. Они даже при проверке
function_exists('mysql_connect') выдают не 1,
а пустую строку, т.е. этой функции как-бы нет.
Кроме того, если скрипт начинается с <? ,
а не с <?php , то он в crone вообще не
интерпретируется, а просто выдается как текст.

Я в настройках вроде бы ничего не менял.
Говорят, что какие-то файлы .htaccess могут
влиять. Но у меня такой файл только один и он пустой.
Запускаю скрипты из crona так:

php /home/login...

Эти же скрипты, если вызываются пользователем
из браузера, работают нормально.

Техподдержка хостера говорит: проверяйте
свои настройки подключения к базам.(?)

Может, при запуске в crone для php надо еще какие-то
флаги задать? Вроде:

php -e -t /home/login...

У меня это первый хостинг, так что я пока плохо разбираюсь
во всех этих деталях.
 

tony2001

TeaM PHPClub
php из консоли и модуль php для Апача - это две большие разницы, как говорят у нас в Одессе.
узнавай у хостера почему они собраны по-разному.
 

Игорёк

Новичок
Originally posted by tony2001
php из консоли и модуль php для Апача - это две большие разницы, как говорят у нас в Одессе.
узнавай у хостера почему они собраны по-разному.
То есть, возможно, хостер просто изменил конфигурацию php, запускаемого из консоли? И никакие мои настройки не могут вызвать такую работу php?
Все-таки, могу ли я, задав ключи для php, заставить его работать так как надо (например вкллючить опцию short_open_tag - это она разрешает <? , или работу с mysql)?
 

Alien

Новичок
вызови

php -i > consolephpinfo.html

получишь html-ник с выводом phpinfo() - взгляд из консоли. смотри в чем отличия,
спрашивай хостера
 

Игорёк

Новичок
Автор оригинала: Alien
вызови

php -i > consolephpinfo.html

получишь html-ник с выводом phpinfo() - взгляд из консоли. смотри в чем отличия,
спрашивай хостера
Сделал. Только результат непонятный, вроде бы mysql вообще отсутствует, но в опциях задается. Я выложил сюда:
http://bu789.front.ru/cron_phpinfo.html

Включен ли mysql?
 

fixxxer

К.О.
Партнер клуба
1) Судя по первой строчке из хедера, это CGI-версия PHP. Для запуска по крону желательно CLI. Но, на безрыбье и так можно, в принципе...
2) --with-mysql=shared,/usr
ыть...а вот тут то мы и не находим либу...
пускай статически перекомпилят.
если хостеры тормоза, тут, в принципе, тоже можно выкрутиться:
$result = split("\n",`echo 'SELECT * from MyTable'|/path/to/mysql -uUSERNAME -pPASS DBNAME`);
$i=0;
$fieldnames = split("\t",$result[$i++]);
while($i<sizeof($res)) {
$fieldvalues = split("\t",$result[$i++]);
// do smth with it
}
примерно так. работоспособность не проверял, но идея, думаю, ясна.
 

Игорёк

Новичок
Оказывается, у них по крону вызывается какой-то "левый" php, так что если написать:
php /home/login/public_html/myscript.php

то этот php не работает с mysql;

После долгих разбирательств техподдержка предложила решение:

/usr/local/bin/php /home/login/public_html/myscript.php

Тогда вызывается "правильный" php. Но! Скрипт при этом выполняется не в своем каталоге! И он не может правильно отработать всякие includ'ы. Я посмотрел в phpman'е. Там вроде бы нет ключа для php для задания каталога выполнения скрипта.

Попробовал еще один вариант, включение
#!/usr/local/bin/php
в начале скрипта, а в кроне просто пишу вызов скрипта:
/home/login/public_html/myscript.php

но это тоже почему-то не работает.

Может посоветуете какое-нибудь решение? На техподдержку надежды мало - они по-моему еще хуже меня во всем разбираются.
 

Игорёк

Новичок
Всё, я нашел решение.
Пишу в кроне:

cd /home/login/public_html; /usr/local/bin/php /home/login/public_html/myscript.php

И все работает. Всем спасибо за помощь.
 

tony2001

TeaM PHPClub
>Скрипт при этом выполняется не в своем каталоге!
CLI не делает cd в директорию скрипта, как делает CGI.
это фича.
 
Сверху