ฉันจะอนุญาตให้ผู้ใช้จัดลำดับความสำคัญของกระบวนการเพื่อลบความดีได้อย่างไร


12

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

สคริปต์ทุบตีปัจจุบันของฉันมีลักษณะเช่นนี้ (ส่วนสำคัญ):

sleep 10 && \
sudo renice -n $NICENESS $(ps -u $(id -u) -o "%p:%c" | sed -n "s/:java$//p") & \
java -Xmx8G -Xms2G -jar minecraft_server.jar nogui    

sleepreniceเพียงแค่ความล่าช้าในการดำเนินการของ reniceตัวเองใช้psในการตรวจสอบกระบวนการจาวาโดยใช้ ID ของผู้ใช้ อาจจะมีกรณีอื่น ๆ ของ Java พล่านภายใต้ผู้ใช้งานที่แตกต่างกัน แต่เซิร์ฟเวอร์ Minecraft ทำงานภายใต้ผู้ใช้ของตนเองMinecraft

เห็นได้ชัดว่าฉันไม่ต้องการป้อนรหัสผ่านทุกครั้งที่ฉันเริ่มต้นเซิร์ฟเวอร์
จาก/ etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

มีวิธีที่สง่างามกว่านี้หรือไม่? การใช้งานอย่างง่ายniceไม่ใช่ตัวเลือกsudo nice bashเมื่อใช้ร่วมกับNOPASSWD:ตัวเลือกจะเป็นปัญหาด้านความปลอดภัยที่ยอดเยี่ยม

คำตอบ:


9

โมดูล pam_limits.so สามารถช่วยคุณได้

อนุญาตให้คุณตั้งค่าขีด จำกัด บางอย่างสำหรับผู้ใช้และกลุ่มเฉพาะหรือตัวแทนหรือช่วงของผู้ใช้และกลุ่ม

โดยทั่วไปข้อ จำกัด ที่คุณสามารถตั้งค่าได้คือการตั้งค่า ulimit แต่ยังรวมถึงจำนวนเซสชันการล็อกอินกระบวนการกระบวนการเวลา CPU ลำดับความสำคัญเริ่มต้นและลำดับความสำคัญสูงสุด (renice) ตรวจสอบหน้า limit.conf สำหรับข้อมูลเพิ่มเติม

ตัวอย่างเช่นคุณสามารถกำหนดค่ากลุ่ม mindcraft ของคุณเพื่อให้กระบวนการทั้งหมดเริ่มต้นด้วยระดับความสำคัญเริ่มต้นที่เพิ่มขึ้นและคุณสามารถอนุญาตให้พวกเขาใช้คำสั่ง nice และ renice เพื่อเพิ่มลำดับความสำคัญของงานที่สำคัญของพวกเขาเองเช่นกัน

# /etc/security/limits.conf
# increase default and max prio for members of the mindcraft group
@mindcraft   hard priority -10
@mindcraft   hard nice     -18   

4
การตั้งค่าเฉพาะวงเงินยากสำหรับดูเหมือนจะไม่ทำมันผมต้องตั้งค่าทั้งการใช้nice -
Baarn

ดูเหมือนจะไม่ทำงานสำหรับฉันเลยบน Ubuntu 16.04 ฉันตั้งค่าpriorityเป็น -10 และnice-15 และฉันได้รับ "สิทธิ์ถูกปฏิเสธ" เสมอแม้ว่าฉันจะพยายามใช้ "nice -n -2" ในบางสิ่งก็ตาม ฉันต้องรีบู๊ตหรือไม่ ฉันเพิ่งออกจากระบบและอีกครั้งตามคำแนะนำนี้
Richard Wiseman

อัปเดตในโพสต์ก่อนหน้าของฉัน ... ตั้งแต่รีบูตเครื่องฉันพบว่าการpriorityตั้งค่ามีผล แต่การniceตั้งค่าอนุญาตให้ฉันลดระดับความสำคัญลงเท่านั้น เมื่อฉันเริ่มต้นบางสิ่งด้วยลำดับความสำคัญเริ่มต้นตอนนี้ -10 ฉันสามารถreniceดำเนินการถึง -9 แต่ไม่สามารถreniceกลับไปเป็น -10 ได้
Richard Wiseman

อัปเดต 2: ฉันทำงานเสร็จแล้ว! มันใช้hardที่ทำให้เกิดปัญหา ฉันเปลี่ยนเป็น-แทนและใช้งานได้ดีในตอนนี้ คำตอบนี้ช่วยให้ฉันไปถึงจุดต่ำสุดของมัน ฉันคิดว่าปัญหาคือว่าฉันมีขีด จำกัด อ่อนนุ่มที่ได้รับในทางอาจจะเอาชนะขีด จำกัด อย่างใด อย่างไรก็ตาม-แทนที่จะhardแก้ไขให้ฉัน
Richard Wiseman

1

การใช้reniceโดยไม่sudoเป็นไปไม่ได้ ฉันพูดจากrenice(1)หน้าคน:

ผู้ใช้อื่นที่ไม่ใช่ผู้ใช้ขั้นสูงอาจเปลี่ยนลำดับความสำคัญของกระบวนการที่พวกเขาเป็นเจ้าของเท่านั้นและสามารถเพิ่มค่าที่ดีของพวกเขา (เพื่อเหตุผลด้านความปลอดภัย) ในช่วง 0 ถึง PRIO_MAX (20) เว้นแต่ว่าขีด จำกัด ของทรัพยากรที่ดีคือ ชุด (Linux 2.6.12 และสูงกว่า)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.