ฉันจะเริ่มต้นกระบวนการด้วยค่าที่ดีได้ที่ -20 และไม่ให้สิทธิ์รูท


18

ฉันต้องการเริ่มต้นกระบวนการด้วยค่าที่ดีของ -20 นี้ต้องให้ผมใช้คำสั่งเช่น sudo nice -n -20 matlab- อย่างไรก็ตามสิ่งนี้เริ่มต้นด้วย matlab ในฐานะรูทด้วย มีวิธีในการมี matlab ที่ไม่ใช่รูทหรือไม่?

แนวทางปัจจุบันของฉันคือ - sudo nice -n -20 sudo -u myusername matlabซึ่งสำหรับฉันดูเหมือนว่าแฮ็ค มีวิธีโดยตรงในการทำเช่นนี้?


sudoคุณควรจะสามารถที่จะเพียงแค่วาง rootไม่จำเป็นสำหรับกระบวนการของคุณเอง
จอร์แดน

8
หากคุณต้องการตั้งค่าลำดับความสำคัญสูงกว่าค่าเริ่มต้นคุณต้องมี superuser (-20 คือลำดับความสำคัญสูงสุด) วิธีเดียวที่ฉันสามารถคิดได้ว่าจะทำเช่นนี้คือการ sudo renice หลังจากที่เริ่มต้น อย่างไรก็ตามเนื่องจากคุณใช้งาน matlab แบบโต้ตอบมันพูดได้ง่ายกว่าทำ
Alan Shutko

1
ไม่ใช่แฮ็คนั่นเป็นวิธีที่จะไป
Hauke ​​Laging

@jordanm - หากไม่มี sudo นี่คือคำสั่งที่ถูกต้อง - nice -n -20 matlabและนี่คือผลลัพธ์ที่ดี: ไม่สามารถตั้งค่าความดีได้: ไม่อนุญาตการปฏิเสธ Matlab เริ่มต้นขึ้นและค่าที่ดีคือ 0
Lord Loh

@AlanShutko - ฉันสามารถทำงานsystem('sudo renice ...')ใน MATLAB ได้ แต่ MATLAB เริ่มต้น 2 กระบวนการ - MATLAB และ matlab_helper ฉันอาจต้องทำทั้งสองอย่าง นอกจากนี้ฉันยังต้องการให้กระบวนการ MATLAB ทั้งหมดของฉันมีลำดับความสำคัญสูง - เมื่อฉันเริ่มmatlabpool local การประมวลผลแบบขนาน @HaukeLaging - ฉันเริ่มคิดว่าคุณพูดถูก
ลอร์ดโลห์

คำตอบ:


20

ฉันจะเริ่มต้นตามปกติและใช้ "renice" ในภายหลัง

อย่างไรก็ตามฉันสามารถแฮ็คอย่างรวดเร็วพร้อมกับ "su" ซึ่งใช้งานได้:

sudo nice -n -20 su -c command_to_run user_to_run_as

(หากคุณไม่จำเป็นต้องให้รหัสผ่าน sudo - อาจเป็นเพราะคุณเพิ่งได้รับรหัสผ่านไปแล้ว - คุณอาจเพิ่ม "&" เพื่อใส่ทุกอย่างไว้ในพื้นหลัง)

เมื่อคุณรูทด้วยคำสั่ง sudo แล้ว su จะไม่ขอรหัสผ่านจากคุณ ฉันสามารถเริ่มโปรแกรม X จากเทอร์มินัลอีมูเลเตอร์ภายใต้ X หากคุณต้องการเรียกใช้โปรแกรม X เป็นผู้ใช้อื่นที่ไม่ใช่ผู้ใช้ที่เป็นเจ้าของ X-session คุณอาจต้องบอก X อย่างชัดเจนเพื่ออนุญาต (เปิดสำหรับ X-clients จากผู้ใช้รายนั้น)


1
ขอขอบคุณ. ดังนั้นฉันคิดว่าวิธีที่ฉันคิดว่าเป็นวิธีเดียวที่จะทำเกี่ยวกับ
ลอร์ดโลห์

มันใช้งานได้! สิ่งเดียวที่ฉันพบตอนนี้คือฉันไม่มีเอาต์พุตมาตรฐาน วิธีแก้ปัญหานี้ เช่นsudo nice -n 19 su -c $(echo "test")ให้ผลผลิตไม่
DrumM

ไม่ดีคุณต้องทำsudo nice -n 19 su -c "echo 'test'"' When you want to run a function in su -c do` ดูstackoverflow.com/a/3727572/2522849
DrumM

8

อีกหนึ่งขั้นตอนต่อไป @Jordan ต่อไปนี้เป็นทางออกที่ยอดเยี่ยมสำหรับการsudo nice -n -xx su <username> -c matlabแฮ็ค

หมายเหตุ: การใช้ชื่อผู้ใช้ = sid , matlab meta-data dir = / var / lib / matlab , nice = -10การเปลี่ยนแปลงที่คุณต้องการ

  1. สร้าง matlab meta-data dir (PERPARE)

    sudo mkdir /var/lib/matlab

  2. เพิ่มผู้ใช้ที่ระบุเพื่อเปิดตัว matlab & persimisson ขวา

    sudo useradd -d / var / lib / matlab sid
    sudo chown sid: sid / var / lib / matlab
  1. ตั้งรหัสผ่านผู้ใช้ (sid)

    sudo passwd sid

  2. ผนวกต่อไปนี้เพื่อ /etc/security/limits.conf

    sid - priority -10

  3. ตั้งค่าและคัดลอก ssh-key เพื่อทำการเข้าสู่ระบบโดยอัตโนมัติ (OPTIONAL)

    ssh-keygen -t rsa # ติดตาม key passwd misc   
    ssh-copy-id sid @ localhost # การใช้ passwd ของ sid
  1. สร้าง wrapper เชลล์ matlab (แก้ไขข้อผิดพลาดเงียบล้มเหลว ERR )
    sudo -i
    cat> / usr / local / bin / wmatlab
    #! / bin / bash -
    # wrapper เพื่อเปิด MATLAB
    / usr / local / MATLAB / <version> / bin / matlab -desktop
    EOF
    chmod + x / usr / local / bin / wmatlab
  1. Ajust sid's shell

    sudo usermod -s /usr/local/bin/wmatlab sid

  2. เริ่มต้น matlab โดยใช้ ssh ด้วย Xforward

    ssh -X sid@localhost


2
นี่ควรเป็นคำตอบที่ยอมรับได้
user47093

4

ฉันได้พบสิ่งนี้สามารถทำได้โดยการแก้ไขไฟล์/etc/security/limits.conf(อย่างน้อยใน distros linux บาง) ในกรณีของฉันฉันเพิ่งเพิ่ม

#<domain> <type> <item> <value> my_user - nice -20

จากนั้นคุณสามารถดำเนินการ

nice -n -20 matlab


หลังจากทำการเปลี่ยนแปลงนี้ควรออกจากระบบ / เข้าสู่ระบบอีกครั้ง: unix.stackexchange.com/q/108603/247665
shaneb

2

@jordanm พูดว่า drop sudo คุณสามารถทำให้กระบวนการของคุณดีขึ้นเพื่อให้ลำดับความสำคัญต่ำลง:

nice -20 matlab

sudoไม่


สิ่งนี้ไม่ได้ผล system('ps a -o pid -o comm -o nice')เข้าใจฉัน 13580 MATLAB 19- MATLAB กำลังทำงานโดยมีลำดับความสำคัญต่ำสุดแทนระดับสูงสุด คำถามของฉันเกี่ยวกับวิธีเพิ่มลำดับความสำคัญและไม่ลด
ลอร์ดโลห์

โดยไม่ต้องsudoนี้เป็นคำสั่งที่เหมาะสม - และนี่คือการส่งออกnice -n -20 matlab nice: cannot set niceness: Permission deniedMatlab เริ่มต้นขึ้นและค่าที่ดีคือ 0
Lord Loh

3
OP ไม่ต้องการเพิ่มลำดับความสำคัญ (ลบดี) เช่น "nice --20 mathlab" (double -) ในรูปแบบเก่า "nice -n -20 mathlab" ในใหม่ เฉพาะ root เท่านั้นที่สามารถใช้ค่า nice-negative ได้
Baard Kopperud

1
CAP_SYS_NICE จะอนุญาตให้ OP ทำสิ่งนี้โดยไม่มีสิทธิ์รูท แต่เกี่ยวข้องกับการค้นหาความสามารถของลินุกซ์ (สิ่งที่คนจำนวนมากไม่เข้าใจและอาจทำงานได้มากกว่าที่คุ้มค่า) ฉันแค่พูดถึงมันเพื่อความสมบูรณ์
Bratchley


1

pam อนุญาตให้คุณตั้งค่าขีด จำกัด บน nice ต่อกลุ่มไฟล์คอนฟิกูเรชัน:

@grnice ลำดับความสำคัญยาก -20

@grnice ยากดี -20

และตรวจสอบให้แน่ใจกลุ่มกระบวนการทำงานใน grnice


1

เพิ่มผู้ใช้ไปยัง sudoers (อันที่จริงเป็นไฟล์ใหม่ใน /etc/sudoers.d แต่เป็นสถานที่เดียวกัน):

niceuser ALL=NOPASSWD:/usr/bin/nice

จากนั้นเป็น "niceuser":

niceuser@localhost $ sudo nice -n -10 command...

และทำสิ่งที่ฉันต้องการ (นั่นคือตอนนี้ผู้ใช้ของฉันสามารถเพิ่มลำดับความสำคัญของ {command ... }) รองรับผู้ใช้หลายคน ฯลฯ - ใช้man 5 sudoersสำหรับรายละเอียด


4
ที่ยังคงเรียกใช้คำสั่งในฐานะรูทซึ่งเป็นสิ่งที่โปสเตอร์พยายามหลีกเลี่ยง
Kyle Butt

1

ตัวเลือกอื่น ๆ ที่เป็นไปได้ (ง่าย ๆ แต่ปลอดภัยน้อยกว่า) คือการเปิดใช้งานสิทธิ์ setuid / setgid สำหรับniceปฏิบัติการ

sudo chmod +s /usr/bin/nice

setuid กำหนดผู้ใช้ใด ๆ ที่สามารถเรียกใช้งานไฟล์ UID ที่มีประสิทธิภาพของเจ้าของไฟล์ (ในกรณีนี้root) เมื่อทำการเรียกใช้ไฟล์ดังนั้นจึงเทียบเท่ากับการใช้งานในฐานะผู้ใช้นั้น setguid ทำเช่นเดียวกันกับ GID ที่มีประสิทธิภาพ


หรือคุณสามารถทำได้อย่างปลอดภัยยิ่งขึ้น:

# create a system group named `nice'
groupadd -r nice

# set the owner group for `nice' executable
chgrp nice /usr/bin/nice

# disallow other users to run `nice`
chmod o-x /usr/bin/nice

# allow anyone who are able to execute the file gain a setuid as root
chmod u+s /usr/bin/nice

# add your user to the group
usermod -a -G nice <your-user-name>

ระวังคุณต้องลงชื่อเข้าใช้บัญชีของคุณอีกครั้งเพื่อให้กลุ่มใหม่มีผล

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