Debianサーバーは、標準のシステムサービスユニットであるphpsessioncleanと共にインストールされます。 30分ごとに呼び出され、シェルスクリプトを呼び出し、次に/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
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つを定義するだけですが、実験する時間はありません。