En post anteriores hemos visto como podemos Gestionar Dinámicamente Procesos usando Projects, sin embargo, cuando hablamos de Instalar Apache HTTP Server tenemos que realizar algunos cambios para poder utilizarlos.
El problema viene por la forma de ejecutarse de Apache HTTP Server. Éste realiza un setuid al usuario configurado en la propiedad <User> y <Group> del archivo $APACHE_HOME/conf/httpd.conf y por lo tanto, no se produce un nuevo proceso <newtask>, así que los parámetros de configuración dinámica se heredan del proceso padre, en nuestro caso es <root>.
Veamos un ejemplo para explicarlo mejor -asumimos que tenemos instalado nuestro Apache HTTP en /opt/www/apache-1.3.41 tiene configurado como User y Group www. Vamos a crear un nuevo project para el usuario www y veremos qué sucede
# vi /opt/www/apache-1.3.41/conf/httpd.confComo podemos ver, nuestro servidor está utilizando el project <user.root> en vez del que nosotros queremos que es <user.www>, para solucionarlo, deberemos editar el archivo $APACHE_HOME/bin/apachectl y modificar la forma de inicio de nuestro servidor.
...
Port 80
User www
Group www
...
# projadd -G www -c 'Apache 1.3.x HTTP Server' user.www
# /opt/www/apache-1.3.41/bin/apachectl stop
/opt/www/apache-1.3.41/bin/apachectl stop: httpd stopped
# /opt/www/apache-1.3.41/bin/apachectl start
/opt/www/apache-1.3.41/bin/apachectl start: httpd started
# ps -u www -o project,comm
PROJECT COMMAND
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
user.root /opt/www/apache-1.3.41/bin/httpd
Deberemos incluir el siguiente bloque de código justo antes de <for ARG in $@ $ARGS> de forma que quede así
# vi /opt/www/apache-1.3.41/bin/apachectlY con este cambio, reiniciamos nuestro Apache HTTP Server y comprobamos que project tiene asignado ahora.
...
...
## Project Name
PROJNAME="user.www"
NEWTASKBIN=`which newtask`
PROJEXITS=`cat /etc/project |grep $PROJNAME`
if [ "x$PROJEXITS" != "x" ] ; then
## Support for Custom Project
HTTPD="$NEWTASKBIN -p $PROJNAME $HTTPD"
fi
for ARG in $@ $ARGS
do
# check for pidfile
if [ -f $PIDFILE ] ; then
PID=`cat $PIDFILE`
...
...
...
# /opt/www/apache-1.3.41/bin/apachectl stopAhora, ya podemos asignar los parámetros dinámicos como deseemos, por ejemplo, Número máximo de descriptores abiertos
/opt/www/apache-1.3.41/bin/apachectl stop: httpd stopped
# /opt/www/apache-1.3.41/bin/apachectl start
/opt/www/apache-1.3.41/bin/apachectl start: httpd started
# ps -u www -o project,comm
PROJECT COMMAND
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
user.www /opt/www/apache-1.3.41/bin/httpd
# projmod -sK 'process.max-file-descriptor=(priv,2048,deny)' user.wwwConclusión
Teniendo en cuenta la forma de trabajo de la gestión dinámica de recursos, podemos con unos mínimos cambios, obtener este beneficio en prácticamente todas nuestras aplicaciones, con la potencia y simplicidad que esto supone
Referencias
No hay comentarios:
Publicar un comentario