apache2ctl: 87: ulimit: límite de configuración de error (Operación no permitida)

12

El servidor funciona bien, o al menos así parece, pero siempre existe el siguiente error:

apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)

Sucede con Apache 2.2.22-9 en Debian Wheezy.

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: límite de configuración de error (Operación no permitida)
Sintaxis OK

# service apache2 reload

[....] Recargando la configuración del servidor web: apache2 / usr / sbin / apache2ctl: 87: ulimit: límite de configuración de error (Operación no permitida)
. Okay

# service apache2 restart

[....] Reiniciando el servidor web: apache2 / usr / sbin / apache2ctl: 87: ulimit: límite de configuración de error (Operación no permitida)
... esperando / usr / sbin / apache2ctl: 87: ulimit: límite de configuración de error (Operación no permitido)
. Okay

# service apache2 status

Apache2 se está ejecutando (pid 32045).

Pascal Polleunus
fuente
1
Eche un vistazo a lo que tiene en /etc/security/limits.conf y /etc/security/limits.d. Parece que tiene APACHE_ULIMIT_MAX_FILES (ver en / usr / sbin / apache2ctl) variable establecida en algo más grande que el límite en esos archivos.
HUB

Respuestas:

16

Esto podría ayudar: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors
Mukesh Chapagain
fuente
Gracias, ya vi eso pero no ayuda. Usar sudo o no no cambia nada, tengo el mismo error.
Pascal Polleunus
1
¡Trabajó para mi! Olvidó totalmente sudo.
ThomasReggi
2
+1 magia sudosiempre hace el truco
bicicleta
peor aún, tengo la configuración de la ventana acoplable donde esto funciona, funciona en la computadora de mi casa, pero no en el servidor ... en el contenedor sin diferencia entre ellos ... no tiene sentido para mí
superhéroe
5

El problema proviene de / usr / sbin / apache2ctl (en Debian). Echale un vistazo:

~$ grep ULIMIT /usr/sbin/apache2ctl
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
    $ULIMIT_MAX_FILES

Aquí está estableciendo el número de archivos abiertos permitidos en 8192. O intentando y fallando, en su caso.

Entonces, para evitar obtener un error cuando apache2ctl hace eso, ajuste la configuración de su sistema en el archivo /etc/security/limits.conf agregando estas dos líneas:

*               soft    nofile          8192
*               hard    nofile          8192

No lo aumenté a más de lo necesario (8192) porque no sé qué más afectará. Sin embargo, esto elimina la advertencia.

No estoy seguro de si necesitará reiniciar su sistema después de eso, porque hay un elemento dinámico en los límites que no estoy familiarizado. Sin embargo, puede realizar pruebas con la suficiente facilidad para averiguar cuál es su número de archivos ulimit actual:

ulimit -n

Es posible que desee leer donde lo encontré: stackoverflow - configuración de ulimit

Adán
fuente
¿Cómo haría lo contrario y reduciría el límite de Apache?
eri0o
Al ver que la secuencia de comandos que publiqué en la respuesta proviene directamente de la secuencia de comandos apache2ctl instalada por apache, entonces tendrá que ir a ese archivo de secuencia de comandos y cambiarlo, suponiendo que tenga el acceso correcto y suponiendo que está dispuesto a repetir la acción con cada actualización de Apache.
Adam
2

1.Compruebe y modifique el valor de ulimit en su máquina host. Agregue los valores en el archivo / etc / profile y luego haga que surta efecto.

ulimit -u 10240
ulimit -n 8192     #This configuration is what we most needed
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

source /etc/profile

o tu puedes:

sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

2. Reinicie el servicio acoplable y haga que la configuración sea efectiva.

sudo service docker restart

3. Pruebe el ulimit en el contenedor.

ulimit -n

Este es el resultado de mi prueba!

Sugerencias: Tal vez también pueda probar el comando que se muestra a continuación (requisito previo: ulimit en la máquina host debe ser mayor que 8192), pero he fallado .

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash
usuario3772170
fuente