0

连接到数据库以检索数据并将其发送到 Web 服务的 php 5.5.14 脚本在控制台中执行时工作正常,但在 cronjob (crontab) 中不起作用。当 cronjob 执行脚本时,不会通过 pdo_oci 驱动程序建立数据库连接,而是抛出带有消息 'SQLSTATE[]: (null)' 的异常 'PDOException'。

我已经尝试了多种方法来查找错误,但没有任何效果。首先,我通过 cronjob 中的 php -m 和 php -v 检查了 php 安装,并在以用户身份调用时将模块和版本与 php 版本进行了比较。安装的模块和版本是相同的。其次,我使用 su -u user crontab -e 让 cronjob 在我的用户下运行。然后我记录了所有凭据和所有内容,以确保连接字符串与直接调用时的连接字符串相同。连接字符串被证明是相同的。我只是无法理解为什么脚本会在直接在控制台中执行但不会在 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 运行时,会抛出带有消息 'SQLSTATE[]: (null)' 的异常 'PDOException'。奇怪的是,该脚本已经在另一台服务器上运行,并且一切正常。

我知道使用的 php 版本非常旧,我的工作是进行 1:1 迁移,我不允许升级 php 版本。

4

1 回答 1

0

我终于找到了解决方案,如果有人遇到同样的问题,这可能会对您有所帮助。我偶然发现,系统以某种方式使用了另一个版本的 oracle 即时客户端,而不是我的用户。不知何故,即使我的用户在 cronjob 中调用了该脚本也没关系,因为它总是使用错误的版本。确保您只安装了正确版本的 oracle 即时客户端,并且仅将该版本导出为库路径。

于 2019-02-04T08:21:31.490 回答