Módulo cliente instantâneo do Oracle não encontrado quando o script PHP é executado a partir de uma unidade de serviço systemd

1

Um servidor Debian possui uma unidade de serviço systemd padrão instalada: phpsessionclean. É chamado a cada 30 ', invocando o script de shell /usr/lib/php/sessionclean , que por sua vez invoca um pequeno script php em linha, usando o cli SAPI. Esta execução emite o seguinte aviso a cada 30 ':

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/oci8.so' - libmql1.so: cannot open shared object file: No such file or directory in Unknown on line 0

Além disso, esses avisos não são emitidos quando é uma tarefa do cron que invoca scripts php em geral.

Eu posso confirmar que o módulo oci8 é carregado quando eu executo php -c <path to INI file> -m | grep oci8 . Tentei definir LD_LIBRARY_PATH e ORACLE_HOME para o caminho relevante dentro de /usr/lib/php/sessionclean , mas isso não funcionaria. No entanto, eu costumava obter avisos equivalentes, mesmo através de trabalhos de crontab, no momento em que eu não tinha definido essas variáveis de ambiente no topo do crontab. Isso para dizer que parece que o ambiente Oracle não é carregado quando o script PHP é executado a partir do mecanismo systemd.

Minha pergunta: como tornar o script PHP chamado systemd ciente do ambiente Oracle?

    
por Fabien Haddadi 19.04.2018 / 06:54

1 resposta

1

Como sugeriu meu Mark Stosberg, adicionei essa linha exclusiva

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

para /lib/systemd/system/phpsessionclean.service , na seção [Serviço] e, em seguida, recarregou o serviço: systemctl reload phpsessionclean . As execuções subseqüentes não geraram o aviso visto antes. Suponho que apenas uma das duas variáveis definidas é necessária, mas não tenho tempo para realizar o experimento.

    
por 23.04.2018 / 13:29

Tags