“ echo 3> / proc / sys / vm / drop_caches” - การอนุญาตถูกปฏิเสธเป็น root


26

ขณะนี้ฉันมีปัญหาบางอย่างเกี่ยวกับแคช ตอนนี้มันน้อยไปหน่อยดังนั้นฉันอยากจะล้างมัน ฉัน googled และพบคำสั่งเล็ก ๆ นี้: 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
คุณกำลังใช้งานนี้เป็นรากหรือคุณใช้sudo?
terdon

2
ฉันกำลังทำงานนี้เป็นราก แต่ sudo ก็ล้มเหลวเช่นกัน
BrainStone

ไม่ทำงานเช่นกัน ลองไปแล้ว ข้อความแสดงข้อผิดพลาดเดียวกัน
BrainStone

ดู slm ของ A ในคำถามนี้มันอาจช่วยได้
Risto Salminen

สิ่งนี้ไม่น่าเป็นไปได้อย่างยิ่ง แต่คุณไม่เคยรู้ว่า/proc/sys/vm/drop_cachesมีอยู่จริงหรือ
terdon

คำตอบ:


27

ฉันเข้าสู่ระบบในฐานะ root เหนือ SSH ... มันเป็นเครื่องระยะไกลที่ใช้ Debian

จริง ๆ แล้วมันเป็นเครื่องระยะไกลหรือเป็นเพียงระบบระยะไกล? หากนี่คือ VPS slice ที่ใดที่หนึ่ง (อย่างน้อยก็ในบางรูปแบบ) การจำลองเสมือนของระบบปฏิบัติการ (เช่น openVZ) จะไม่อนุญาตสิ่งนี้จากภายในคอนเทนเนอร์ คุณไม่ได้รันเครื่องคุณแค่รันชิ้นงานของคุณ


2
มีก็เหมือนไม่มีทาง ???
BrainStone

1
อาจจะไม่ได้เนื่องจากจะไม่มีประเด็นมากนักในการไม่อนุญาตหากมีวิธีการอื่นที่ใช้งานได้
goldilocks

2
@BrainStone - ฉันใช้ OpenVZ มันเป็นไปไม่ได้!
slm

36

sudo จะต้องครอบคลุมการเปลี่ยนเส้นทางทั้งหมดเพื่อให้สามารถดำเนินการได้อย่างสมบูรณ์โดยรูท:

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

5
มันใช้งานได้จริงสำหรับฉัน (ด้วยตำแหน่งไบนารีที่ถูกต้องสำหรับเสียงก้อง)
orm

ใน OpenVZ ไม่ทำงาน
shilovk

1
หรือคุณสามารถใช้ทีแทน:echo 3 | sudo tee /proc/sys/vm/drop_caches
mchid

1
@mchid ให้ลองเพิ่มความคิดเห็นของคุณเป็นคำตอบ มันทำงานได้ดีสำหรับฉันบน Azure VM
Erik Shilts

เป็นที่เรียบร้อยแล้วดูที่ # ที่จุดเริ่มต้น ปัญหาของ sudo นั้นน่าสังเกต แต่สำหรับคำถามอื่น
Alexei Martianov

13

นี่เป็นพฤติกรรมปกติภายใต้การจำลองเสมือนระดับ OS สิ่งนี้สามารถถูกดำเนินการโดยบุคคลที่มีการเข้าถึงรูทไปยังโหนดฮาร์ดแวร์

ด้วยตัวอย่างเช่นOpenVZคุณจะไม่ได้รับอินสแตนซ์เคอร์เนลของคุณและเช่นนั้นถูก จำกัด จากการดำเนินการคำสั่งเช่นนี้

ทุกคนแชร์แคชหน้าเดียวกันดังนั้นหากต้องการวางแคชเฉพาะอินสแตนซ์ของคุณเคอร์เนลต้องตรวจสอบว่าหน้านั้นเป็นของคุณหรือไม่และอินสแตนซ์อื่นไม่ได้ใช้งานเพจนี้ด้วย

ด้วยเทคนิคการจำลองเสมือนอื่นเช่นKVMหรือXenสิ่งนี้อาจทำงานได้


1
ดังนั้นฉันสามารถ / ควร / ต้องติดต่อ hoster ของฉันเพื่อล้างแคชให้ฉันได้อย่างไร และฉันจะรู้ได้อย่างไรว่า "เทคนิคการจำลองเสมือน" ที่ระบบของฉันเปิดอยู่?
BrainStone

ใช่คุณอาจจะไม่มารอบนี้ ...
ความวุ่นวาย

ฉันไม่คิดว่ามันจะถูกต้อง ฉันกำลังเรียกใช้ vm บางอย่างที่ aws และ Xen และฉันสามารถ drop_caches ได้

2
ความแตกต่างระหว่างการจำลองเสมือนของระบบปฏิบัติการ (OpenVZ, LXC) และการจำลองเสมือนของแพลตฟอร์ม (QEMU, Xen) ซึ่งทั้งสองอย่างนี้มีข้อดีและข้อเสียกับข้ออื่น
goldilocks

1
@bersch Xen ใช้เคอร์เนลของตัวเองสำหรับ VMs OpenVZ ไม่ได้ คุณสามารถนึกถึง OpenVZ เหมือน "chroot" ที่ดีกว่า
นิลส์

8

คุณสามารถใช้echopiped เพื่อsudo teeอนุญาตการอนุญาตที่เหมาะสมที่จำเป็นเมื่อคุณต้องการ echo เป็น root

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

ใช้tee --helpเพื่อแสดงรายการตัวเลือกเพิ่มเติม


0

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

คำสั่งนี้ใช้ได้กับฉันโดยไม่มี/usr/bin/echoคำตอบ mchid sh: 1: /usr/bin/echo: not foundมันก็ทำให้เกิดข้อผิดพลาด ใช้ดังนั้น 'echo' เท่านั้น


-1

ฉันมีปัญหาเดียวกันเมื่อฉันพยายามใช้ 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.  

-2

การใช้การตั้งค่า VM แบบ smilar ด้วย OpenStack และใช้งานได้ (เรียกใช้ Debian):

sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.