Как запустить CGI-скрипт в другом процессе через Apache

#java #apache #memory #process #cgi

#java #apache #память #процесс #cgi

Вопрос:

У меня есть CGI-скрипт, который выполняет очень интенсивное Java-приложение:

start.cgi
#!/bin/sh
cd /var/server/; screen -d -m java -Xmx800M -Xms800M -jar jarfile.jar > /dev/null 2>amp;1 amp;
echo "Server command executed.";

Это выполняется просто отлично, если перейти к нему в интернет-браузере и через сеанс SSH.

Но при запуске путем перехода к нему с помощью интернет-браузера, кажется, что он запускается в процессе apache… Вывод top :
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
7651 apache 24 0 1149m 38m 9012 S 0.0 2.5 0:01.42 java

При запуске через сеанс SSH top выводит:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
7685 root 23 0 1163m 205m 9432 S 12.3 13.6 0:06.03 java

Я полагаю, что CGI-скрипт выполняется в процессе apache…
Может кто-нибудь, пожалуйста, указать, что я сделал неправильно, или указать мне правильное направление?

Спасибо!
Джастин

Ответ №1:

Возможно, вам придется изменить файл вашего скрипта на chmod, чтобы установить uid в качестве root — но я должен сказать, что это не лучшая идея. Есть ли проблема в задании, выполняемом от имени apache, а не root? Конечно, единственная причина, по которой он запускается как root из сеанса ssh, заключается в том, что вы вошли в систему как root?

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

1. Да, я вошел в систему как root в сеансе SSH, но каким-то образом apache не предоставляет Java-приложениям достаточно оперативной памяти или ресурсов процессора, скрипт, похоже, почти не работает, он просто не проходит процесс аутентификации…

2. ХОРОШО — если процессы асинхронны, вы могли бы рассмотреть возможность «отключить» его и запустить в фоновом режиме. Это запустило бы новый процесс Unix, но я не уверен, что было бы легко дождаться его завершения. Это было бы что-то вроде nohup start.cgi amp;

3. Он по-прежнему ведет себя так же… В top ‘RES’ составляет всего 38m по сравнению с сеансом SSH, это мало. Это 205m в сеансе SSH, как это возможно?

4. Установлен ли у вас RLimitMEM в вашем httpd.conf? (Боюсь, что, кроме этого, у меня закончились идеи)