php exec () успешно запускает Rscript с помощью строки cmd, но не работает в браузере

#php #r #linux #server

#php #r #linux #сервер

Вопрос:

Я пытаюсь написать веб-приложение для запуска моего R-скрипта. Я планирую использовать php shell_exec(), чтобы это произошло.

Я написал тестовый скрипт, подобный этому <?php echo shell_exec("Rscript /var/www/html/demo/MyRScript.R"); ?>

Я запускаю его через командную строку. php test.php , он выдает правильный вывод, я также просматриваю htop и обнаружил, что процесс использует 100% cpu в течение нескольких минут.

Однако, когда я попытался запустить его, посетив его через браузер, через адрес http://myURL/demo/test.php . Он не работал должным образом, он выдает только первые несколько строк моего R-скрипта onbrief Off On FALSE 405 0 TRUE 0 405 petitioner P R FALSE 0 396 TRUE 414 0 и немедленно останавливается. Я также не могу найти этот процесс htop .

Я пробовал другую простую командную строку, например ls , rm , , все они работают правильно как в строке cmd, так и через веб-приложение.

Я понятия не имею, что не так. Может ли это быть из-за того, что процесс занимает слишком много процессора, поэтому какой-то механизм завершит его, если он вызывается через Интернет?

Или, если есть какой-либо инструмент или метод отладки, который я могу использовать, чтобы помочь мне найти проблему.

Это мой первый вопрос о переполнении стека, я не знаю, достаточно ли моей информации. пожалуйста, скажите мне, есть ли другая дополнительная информация, необходимая для решения проблемы.

Большое вам спасибо.

Комментарии:

1. CMD — это оболочка Windows. Ничего общего с Linux.

2. opps, я думал, что это то же самое с командной строкой.

3. Существует тег командной строки, но он не кажется полезным.

4. попробуйте добавить «2> amp; 1» в конец вашей команды — вы увидите ошибки прямо там (если они есть), возможно, это не очень хорошее решение для производства, но может помочь в среде разработки. в выходных данных может быть некоторый EOF. Время выполнения также может быть проблемой, поскольку вы описали, что ваш максимум составляет 100% в течение пары минут, а время выполнения php max_execution_time по умолчанию составляет всего 30 секунд.

5. Спасибо, ксива! После добавления «2> amp; 1» я могу найти ошибки и решить проблему!

Ответ №1:

Оказывается, проблема с правами доступа к файлам.

В моем R-скрипте есть строка, пытающаяся получить доступ к файлу, в то время как у пользователя веб-сервера www-data нет разрешения на чтение. После предоставления ему разрешения все идет нормально.

Добавление 2>$1 в конце моей команды очень полезно, я могу получить сообщение об ошибке в моем браузере.