php脚本中的PDO_OCI在cronjob(crontab)中不起作用,但在用户直接执行时起作用



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

我已经尝试了多种方法来查找错误,但都没有成功。首先,我通过cronjob中的php-m和php-v检查了php安装,并将模块和版本与作为用户调用时的php版本进行了比较。安装的模块和版本完全相同。其次,我使用su-u用户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运行时,会引发异常"PDOException",消息为"SQLSTATE[]:(null)"。奇怪的是,该脚本已经在另一台服务器上运行,并且在那里一切正常。

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

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

相关内容

最新更新