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

Сценарий 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 Ответ

0 голосов
/ 04 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...