PDO_OCI в скрипте php не работает в cronjob (crontab), но работает, когда выполняется пользователем напрямую

Скрипт php 5.5.14, который подключается к базе данных для извлечения данных и отправки их в веб-сервис, отлично работает при запуске в консоли, но не работает в cronjob (crontab). Когда cronjob выполняет сценарий, соединение с базой данных через драйвер pdo_oci не устанавливается, и вместо этого создается исключение "PDOException" с сообщением "SQLSTATE[]: (null)".

Я уже пробовал несколько вещей, чтобы найти ошибку, но ничего не получалось. Сначала я проверил установку php через php -m и php -v в cronjob и сравнил модули и версию с версией php при вызове от имени пользователя. Установленные модули и версия были идентичны. Во-вторых, я позволяю cronjob работать под моим пользователем с помощью команды su -u user crontab -e. Затем я зарегистрировал все учетные данные и все, чтобы убедиться, что строка подключения идентична той, которая вызывается напрямую. Строка подключения оказалась идентичной. Я просто не могу понять, почему скрипт запускается при запуске прямо в консоли, а не в cronjob.

Следующая строка устанавливает соединение с базой данных через драйвер pdo_oci:

 $con = new PDO('oci:dbname='//dburl:port/dbserver, dbuser, dbpassword);

Сценарий выполняется через crontab следующим образом:

*/1 * * * * /usr/bin/php /path/to/script/phpscript.php -params

Как указывалось ранее, обычно соединение устанавливается, но при запуске с помощью cronjob возникает исключение PDOException с сообщением "SQLSTATE[]: (null)". Как ни странно, скрипт уже запущен на другом сервере, и там все отлично работает.

Я знаю, что используемая версия php очень старая, моя задача - выполнить миграцию 1:1, и мне не разрешено обновлять версию php.

1 ответ

Я наконец нашел решение, если у кого-то когда-либо будет та же самая проблема, это может вам помочь. Случайно я обнаружил, что система каким-то образом использовала другую версию клиента мгновенного доступа oracle, чем мой пользователь. Каким-то образом, даже если скрипт вызывался с моим пользователем в cronjob, это не имело значения, так как оно всегда использовало бы неправильную версию. Убедитесь, что вы установили только правильную версию клиента мгновенного доступа oracle и что только эта версия экспортируется как путь к библиотеке.

Другие вопросы по тегам