«Echo 3> / proc / sys / vm / drop_caches» - разрешение запрещено как root


26

В настоящее время у меня есть некоторые проблемы с кешем. Сейчас это слишком много, поэтому я хотел это очистить. Я гугл и нашел эту маленькую команду: sync && echo 3 > /proc/sys/vm/drop_caches.
Я вошел в систему как пользователь root через SSH (не используя sudo). Это попытки, которые я сделал:

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

Это удаленная машина, на которой работает Debian. Насколько я знаю, на этой машине есть несколько vCores, и она использует Virtuozzo для виртуализации.
Я действительно просто хочу очистить кеш (поэтому я могу получить к нему доступ только через SSH) .
Я также попытался зарегистрировать это как cronjob. Но это просто не удается!


1
Вы запускаете это как root или используете sudo?
Terdon

2
Я запускаю это как root. Но sudo также терпит неудачу.
BrainStone

Тоже не работает. Уже попробовал. То же сообщение об ошибке.
BrainStone

См. Слм А по этому вопросу , это может помочь.
Ристо Салминен

Это крайне маловероятно, но вы никогда не знаете, /proc/sys/vm/drop_cachesсуществует ли на самом деле?
Terdon

Ответы:


27

Я вошел в систему как пользователь root через SSH ... Это удаленная машина с Debian.

Это на самом деле удаленная машина или просто удаленная система ? Если это где-то фрагмент VPS , (по крайней мере, в некоторых формах) виртуализация ОС (например, openVZ) не разрешит это изнутри контейнера. Вы не запускаете машину, вы просто запускаете свой срез.


2
Там вроде как никак ???
BrainStone

1
Вероятно, нет, так как не было бы особого смысла не разрешать это, если бы были альтернативные методы, которые работали.
Златовласка

2
@BrainStone - я использую OpenVZ, это невозможно!
SLM

36

sudo должен полностью охватить перенаправление, чтобы он мог полностью выполняться пользователем root:

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

5
это на самом деле сработало для меня (с правильным двоичным расположением для эха)
Orm

в OpenVZ не работает
шиловк

1
В качестве альтернативы вы можете использовать вместо этого тройник:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid

1
@mchid, рассмотрите возможность добавления своего комментария в качестве ответа. Это также работало для меня на Azure VM.
Эрик Шилтс

Это уже root, см. # В начале строки. Стоит отметить проблему с sudo, но для другого вопроса.
Алексей Мартианов

13

Это нормальное поведение при виртуализации на уровне ОС. Это может выполнить только тот, у кого есть root-доступ к аппаратному узлу.

Например, в OpenVZ у вас нет собственного экземпляра ядра, и поэтому вы не можете выполнять подобные команды.

Все одни и те же кэш страниц, поэтому падение кэши только экземпляра, ядро должно проверить , если страница принадлежит вам , и если другие экземпляры не используя эту страницу тоже.

С другой техникой виртуализации, такой как KVM или Xen, это может сработать.


1
Так что я мог / должен / должен связаться с моим хостером, чтобы очистить кеш для меня? И как мне узнать, на какой «технике виртуализации» работает моя система?
BrainStone

Да, вы не можете прийти к этому ...
хаос

Я не уверен, если это правильно. Я запускаю несколько виртуальных машин на aws и Xen, и я могу drop_caches.

2
Разница между виртуализацией ОС (OpenVZ, LXC) и виртуализацией платформы (QEMU, Xen), которые имеют преимущества и недостатки по сравнению с другими.
Златовласка

1
@bersch Xen использует собственное ядро ​​для виртуальных машин. OpenVZ нет. Вы можете думать об OpenVZ как о лучшем "chroot".
Нильс

8

Вы можете использовать echopiped для того, sudo teeчтобы разрешить правильное разрешение, необходимое, когда вам нужно повторить как root.

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

Используйте, tee --helpчтобы перечислить больше вариантов.


1

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

У меня эта команда работает без /usr/bin/echoответа в mchid. Это давало ошибку sh: 1: /usr/bin/echo: not found. Так что используется только «эхо»


-1

У меня была такая же проблема, когда я пытался использовать sudo следующим образом:

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

Моим решением было временно переключиться на root. Очевидно, что это разрешение должно быть включено в вашей системе:

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

-2

Использование настроек виртуальной машины Smilar с OpenStack, и это работает (работает Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.