从 systemd 服务单元运行 PHP 脚本时未找到 Oracle 即时客户端模块

从 systemd 服务单元运行 PHP 脚本时未找到 Oracle 即时客户端模块

Debian 服务器安装了标准的 systemd 服务单元:phpsessionclean。它每 30 分钟调用一次,调用 shell 脚本/usr/lib/php/sessionclean,然后使用 cli SAPI 调用一个小型内联 php 脚本。此执行每 30 分钟发出以下警告:

PHP 警告:PHP 启动:无法加载动态库 '/usr/lib/php/20151012/oci8.so' - libmql1.so:无法打开共享对象文件:第 0 行的未知中没有此类文件或目录

此外,当它是一般调用 php 脚本的 cron 作业时,不会发出此类警告。

当我运行时,我可以确认 oci8 模块已加载php -c <path to INI file> -m | grep oci8。我尝试将LD_LIBRARY_PATH和设置ORACLE_HOME为内部的相关路径/usr/lib/php/sessionclean,但那是行不通的。然而,当我没有在 crontab 顶部设置这些环境变量时,即使通过 crontab 作业,我也会获得相同的警告。这就是说,当 PHP 脚本从 systemd 机制运行时,看起来 Oracle 环境没有加载。

我的问题:如何使 systemd 调用的 PHP 脚本感知 Oracle 环境?

答案1

按照我的马克·斯托斯伯格的建议,我添加了那条独特的线

环境=“LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2”“ORACLE_HOME=/opt/oracle/instantclient_12_2”

/lib/systemd/system/phpsessionclean.service[Service] 部分,然后重新加载服务:systemctl reload phpsessionclean。随后的运行不会生成之前看到的警告。我想只需要定义两个变量之一,但我没有时间进行实验。

相关内容