"Echo 3> / proc / sys / vm / drop_caches" - Permiso denegado como root


26

Actualmente tengo algunos problemas con el caché. Es un poco demasiado ahora, así que quería aclararlo. Busqué en Google y encontré este pequeño comando: sync && echo 3 > /proc/sys/vm/drop_caches.
Estoy conectado como root sobre SSH (sin usar sudo). Estos son los intentos que hice:

root@server: ~ # ll /proc/sys/vm/drop_caches
-rw-r--r-- 1 root root 0 15. Jan 20:21 /proc/sys/vm/drop_caches

root@server: ~ # echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # sudo su -c "echo 3 > /proc/sys/vm/drop_caches"
bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # echo 3 | sudo tee /proc/sys/vm/drop_caches
tee: /proc/sys/vm/drop_caches: Permission denied
3

Es una máquina remota que ejecuta Debian. Hasta donde sé, hay algunos vCores en esta máquina y utiliza Virtuozzo para la virtualización.
Realmente solo quiero borrar el caché (por lo que solo puedo acceder a él usando SSH) .
También intenté registrar esto como un cronjob. ¡Pero simplemente falla también!


1
¿Estás ejecutando esto como root o lo estás usando sudo?
terdon

2
Estoy ejecutando esto como root. Pero el sudo también falla.
BrainStone

Tampoco funciona. Ya lo probé. Mismo mensaje de error.
BrainStone

Vea la A de slm sobre esta pregunta , podría ayudar.
Risto Salminen

Esto es extremadamente improbable, pero nunca se sabe, ¿ /proc/sys/vm/drop_cachesexiste realmente?
terdon

Respuestas:


27

Estoy conectado como root sobre SSH ... Es una máquina remota que ejecuta Debian.

¿Es realmente una máquina remota o simplemente un sistema remoto ? Si se trata de un segmento VPS en alguna parte, (al menos algunas formas de) la virtualización del sistema operativo (por ejemplo, openVZ) no permitirá esto desde el contenedor. No ejecutas la máquina, solo ejecutas tu rebanada.


2
¿No hay manera de que no ?
BrainStone

1
Probablemente no, ya que no tendría mucho sentido no permitirlo si hubiera métodos alternativos que funcionaran.
Ricitos

2
@BrainStone: uso OpenVZ, ¡no es posible!
slm

36

sudo tiene que cubrir toda la redirección para que pueda ser ejecutada completamente por root:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"

55
esto realmente funcionó para mí (con la ubicación binaria correcta para echo)
orm

en OpenVZ no funciona
shilovk

1
alternativamente, podría usar tee en su lugar:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid

1
@mchid, considera agregar tu comentario como respuesta. También funcionó para mí en Azure VM.
Erik Shilts

Ya es root, vea # al comienzo de la línea. Vale la pena señalar un problema con sudo, pero para otra pregunta.
Alexei Martianov

13

Este es un comportamiento normal en la virtualización a nivel del sistema operativo. Esto solo puede ser ejecutado por alguien con acceso raíz al nodo de hardware.

Con, por ejemplo , OpenVZ , no obtienes tu propia instancia de kernel y, como tal, no puedes ejecutar comandos como este.

Todos comparten el mismo caché de página, por lo que para eliminar los cachés de solo su instancia, el kernel debe verificar si la página le pertenece y si las otras instancias no están usando esta página también.

Con otra técnica de virtualización como KVM o Xen, esto podría estar funcionando.


1
Entonces, ¿podría / debería / debo contactar a mi proveedor de alojamiento para limpiar el caché por mí? ¿Y cómo averiguo en qué "técnica de virtualización" se encuentra mi sistema?
BrainStone

Sí, puede que no vengas por esto ...
caos

No estoy seguro si esto es correcto. Estoy ejecutando algunos vm en aws y Xen y puedo soltar_cachés.

2
La diferencia es entre la virtualización del sistema operativo (OpenVZ, LXC) y la virtualización de la plataforma (QEMU, Xen), las cuales tienen ventajas y desventajas frente a la otra.
GOLDILOCKS

1
@bersch Xen usa un núcleo propio para máquinas virtuales. OpenVZ no lo hace. Puedes pensar en OpenVZ como un mejor "chroot".
Nils

8

Puede usar echocanalizado para sudo teepermitir el permiso adecuado necesario cuando necesita hacer eco como root.

echo 3 | sudo tee /proc/sys/vm/drop_caches

Use tee --helppara enumerar más opciones.


1

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

Este comando funciona para mí sin /usr/bin/echorespuesta mchid. Estaba dando error sh: 1: /usr/bin/echo: not found. Tan usado solo 'echo'


-1

Tuve el mismo problema cuando intenté usar sudo así:

sudo echo 1 > /proc/sys/vm/overcommit_memory

Mi solución fue cambiar temporalmente a root. Obviamente, ese permiso tiene que estar habilitado en su sistema:

sudo su -  #temporarily switch to root user
echo 1 > /proc/sys/vm/overcommit_memory
exit # Exit as root.  

-2

Usando una configuración de VM similar con OpenStack y esto funciona (ejecutando Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.