PDO_OCI在PHP脚本不在的cronjob(crontab中)工作,但工作当用户直接执行

问题描述 投票:0回答:1

当控制台执行一个PHP 5.5.14脚本,连接到数据库,以便检索数据并将其发送到web服务工作正常,但在的cronjob(crontab中)不起作用。当的cronjob执行脚本,经由PDO_OCI驱动器数据库连接未建立,而是例外“PDOException”与消息“SQLSTATE []:(空)”被抛出。

我已经尝试过许多东西,找到错误,但没有奏效。首先我检查通过PHP -m和PHP -v在的cronjob PHP安装,并且当被称为用户相比,模块和版本的PHP版本。已安装的模块和版本是相同的。第二,我让我的cronjob与苏-u用户的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 []:(空)”被抛出。奇怪的是脚本已经在另一个服务器上运行,一切工作正常那里。

据我所知,所使用的PHP版本是非常老了,我的工作是做一个1:1的迁移和我不允许升级的PHP版本。

php pdo cron oracledb sles
1个回答
0
投票

我终于找到了解决办法,应该没有人有同样的问题,这可能也许帮助你。每次事故我发现,该系统以某种方式使用Oracle即时客户端的另一个版本比我的用户。不知怎的,即使脚本调用了我在的cronjob用户这没有关系,因为它总是会使用错误的版本。请确保您只安装了Oracle即时客户端的正确版本,只有该版本导出为库路径。

© www.soinside.com 2019 - 2024. All rights reserved.