r — Запуск Rscript из PHP: не удается загрузить общие библиотеки

Я пытаюсь запустить код R изнутри PHP. Я использую RHEL 7.4.

Однако, поскольку Apache работает от имени другого пользователя, чем установленные пакеты R, он не может загружать пакеты:

Мой PHP-код имеет следующую строку:

echo shell_exec("(Rscript -e 'library(lme4, lib.loc = \"/var/www/R/lib\")')2>&1");

который выдает эту ошибку в браузере:

Error: package or namespace load failed for 'lme4' in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/var/www/R/lib/Rcpp/libs/Rcpp.so':
/var/www/R/lib/Rcpp/libs/Rcpp.so: failed to map segment from shared object: Permission denied
Execution halted

Файл /var/www/R/lib/Rcpp/libs/Rcpp.so имеет разрешения 775, так что я не думаю, что разрешения на самом деле являются проблемой.

Как я могу сказать Apache / PHP, где искать общие библиотеки?

Сервер не является общедоступным, поэтому я бы выбрал любое решение — от правильного доступа к общей библиотеке до предоставления пользователю apache доступ sudo с NOPASSWD работать как мой пользователь (или что-то подобное безрассудно, так как это на самом деле не работает …).

Спасибо!

0

Решение

Это появляется отчасти из-за настройки SELinux в Red Hat. Я не совсем уверен, является ли это Red Hat-ориентированным или специфичным для конфигурации в моем университете (который установил Red Hat в первую очередь).

Первоначально:

$ getenforce
Enforcing

Fix:

$ sudo setenforce 0
$ getenforce
Permissive

Постоянное исправление: изменить /etc/selinux/config иметь линию

SELINUX=Permissive

Кредит для этот StackOverflow поток.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]