Ошибка разбора при запуске cron, но не из командной строки? - PullRequest
0 голосов
/ 19 января 2010

Итак, у меня есть cronjob, который выполняет скрипт PHP примерно так:

0 0 * * * /usr/local/bin/php -f /home/mysite/mysite.com/cronjobs/renewal_email.php

Если я ввожу ту же команду из командной строки, она запускается без ошибок, а запуск с флагом l не показывает синтаксических ошибок. Однако cron отправляет по электронной почте следующее:

Ошибка разбора: синтаксическая ошибка, неожиданный T_OBJECT_OPERATOR

Строка, о которой идет речь,

$courses[$t->CourseNumber] = $t->course()->CourseName;

Поднимает ли это ограниченное количество информации красные флажки? Кто-нибудь понимает, почему это должно происходить под cron, а не из командной строки?

// Редактировать, чтобы добавить ответ поддержки DreamHost. Скрипт работает с этим изменением.

Версия PHP по умолчанию на сервере - PHP4. Это связано с тем, что сервер использует настройки PATH, а не Apache, чтобы указать, какая версия запускается. Путь к PHP4 / usr / local / bin / php идет до пути PHP5 / usr / local / php5 / bin / php, поэтому он всегда запускается первым при вводе php из оболочки.

Чтобы запустить PHP5 из оболочки, вам нужно указать полный путь:

/usr/local/php5/bin/php --version

Пользователь cron не будет использовать ваш путь .bash_profile, поэтому вам нужно будет указывать полный путь к PHP5 в каждом задании cron.

Ответы [ 3 ]

1 голос
/ 19 января 2010

Hm. Сообщение об ошибке звучит так, будто вы запускаете скрипт PHP5 на интерпретаторе PHP4. Однако, если вы используете точно такой же путь к двоичному файлу PHP, я не вижу, как это может произойти.

Можете ли вы сделать, чтобы задание cron выполнило phpinfo() и посмотрите, что получится?

Для PHP 4 вам придется переписать инструкцию:

$temp = $t->course(); 
$courses[$t->CourseNumber] = $temp->CourseName;
1 голос
/ 19 января 2010

Я бы сказал, что вы используете две разные версии PHP. запускает which php из командной строки путь, отличный от того, который вы используете на вкладке cron?

0 голосов
/ 19 января 2010

Эта ошибка означает, что ваша переменная не содержит объект.Попробуйте использовать var_dump: во время выполнения задания cron.

...