システムサービスデバイスでPHPスクリプトを実行すると、Oracleインスタントクライアントモジュールが見つかりません。

システムサービスデバイスでPHPスクリプトを実行すると、Oracleインスタントクライアントモジュールが見つかりません。

Debianサーバーは、標準のシステムサービスユニットであるphpsessioncleanと共にインストールされます。 30分ごとに呼び出され、シェルスクリプトを呼び出し、次に/usr/lib/php/sessioncleancli 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 oci8LD_LIBRARY_PATHORACLE_HOME内部の相対パスを設定してみましたが、うまく/usr/lib/php/sessioncleanいきませんでした。ただし、crontabの上部にこれらの環境変数を設定しないと、crontab操作でも同じ警告が表示されます。つまり、PHPスクリプトがsystemdメカニズムで実行されたときにOracle環境がロードされていないように見えます。

私の質問:systemdから呼び出されたPHPスクリプトがOracle環境を認識させるにはどうすればよいですか?

答え1

Mark Stolsburgの提案に従って、私はそのユニークなラインを追加しました。

ENVIRONMENT="LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2" "ORACLE_HOME=/opt/oracle/instantclient_12_2"

/lib/systemd/system/phpsessionclean.service[サービス]セクションに移動してサービスを再ロードしますsystemctl reload phpsessionclean。以降の実行では、以前に表示された警告は生成されません。 2つの変数のうちの1つを定義するだけですが、実験する時間はありません。

関連情報