web-dev-qa-db-ja.com

"echo 3> / proc / sys / vm / drop_caches"-rootとして拒否された権限

現在、キャッシュに問題があります。今はちょっと多すぎてクリアしたかったです。私はググってこの小さなコマンドを見つけました:sync && echo 3 > /proc/sys/vm/drop_caches
SSH経由でrootとしてログインしています(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を実行しているリモートマシンです。私の知る限り、このマシンにはいくつかのvCoreがあり、仮想化にVirtuozzoを使用しています。
本当にキャッシュをクリアしたい(だから、SSHを使用してのみアクセスできる)
これをcronjobとして登録してみました。しかし、それも単に失敗します!

28
BrainStone

SSH経由でrootとしてログインしています... Debianを実行しているリモートマシンです。

それは実際にはリモートマシンですか、それとも単なるリモートsystemですか?これがVPSである場合スライスどこかで、(少なくともいくつかの形式の)OS仮想化(たとえば、openVZ)はこれをコンテナー内から許可しません。マシンを実行するのではなく、スライスを実行するだけです。

28
goldilocks

Sudoはリダイレクト全体をカバーする必要があるため、rootで完全に実行できます。

$ Sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
43
rasty.g

これは、OSレベルの仮想化での通常の動作です。これは、ハードウェアノードへのrootアクセス権を持つユーザーのみが実行できます。

たとえばOpenVZを使用すると、独自のカーネルインスタンスを取得できないため、このようなコマンドの実行が制限されます。

すべてが同じページキャッシュを共有するため、インスタンスのみのキャッシュを削除するには、ページが自分のものかどうかをカーネルが確認する必要がありますand他のインスタンスもこのページを使用していないかどうか。

[〜#〜] kvm [〜#〜]またはXenのような別の仮想化手法では、これが機能している可能性があります。

13
chaos

echoSudo teeにパイプして使用すると、rootとしてエコーする必要がある場合に必要な適切な権限を許可できます。

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

その他のオプションを一覧表示するには、tee --helpを使用します。

8
mchid

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

このコマンドは、mchid回答に/usr/bin/echoがなくても機能します。エラーsh: 1: /usr/bin/echo: not foundが発生していました。したがって、「エコー」のみを使用

1
ascii_walker

Sudoを次のように使用しようとしたときにも同じ問題が発生しました。

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

私の解決策は、一時的にルートに切り替えることでした。言うまでもなく、その権限はシステムで有効にする必要があります。

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