连接到数据库以检索数据并将其发送到 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 版本。