Bir kullanıcının bir işlemi negatif güzelliğe önceliklendirmesine nasıl izin verebilirim?


12

Bir kullanıcının sistemde negatif bir değeri olan belirli bir işlemi çalıştırmasını istiyorum. Bu özel program bir minecraft sunucusu olduğu için işlemi arka plana çatallayamıyorum ve sunucuyu kontrol etmek için komut satırına güveniyorum.

Mevcut bash komut dosyam şöyle görünüyor (önemli kısım):

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    

sleepbasitçe yürütülmesini geciktirir renice. renicekendisi pskullanıcının kendi kimliğini kullanarak bir java işlemi kontrol etmek için kullanır . Farklı kullanıcılar altında java yumurtlamanın başka örnekleri olabilir, ancak minecraft sunucusu kendi kullanıcı minecraft'ı altında çalışır .

Sunucuyu her başlattığımda bir şifre girmek istemiyorum.
den / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

Bunu yapmanın daha zarif bir yolu var mı? Sadece kullanmak nicebir seçenek değildir sudo nice bash, NOPASSWD ile birlikte : seçenek büyük bir güvenlik sorunu olacaktır.

Yanıtlar:


9

Pam_limits.so modülü orada size yardımcı olabilir.

Belirli bireysel kullanıcılar ve gruplar veya joker karakterler veya kullanıcı ve grup aralıkları için belirli sınırlar belirlemenize olanak tanır.

Ayarlayabileceğiniz sınırlar genellikle ulimit ayarlarıdır ancak aynı zamanda eşzamanlı oturum açma, işlem sayısı, CPU zamanı, varsayılan öncelik ve maksimum öncelik (yeniden başlatma) sayısıdır. Daha fazla bilgi için limit.conf man sayfasına bakın.

Örneğin, mindcraft grubunuzu tüm işlemlerini varsayılan bir öncelikle başlatacak şekilde yapılandırabilir ve önemli işlerinin önceliğini yalnızca önceliği azaltmak yerine elle artırmak için nice ve renice komutlarını kullanmalarına izin verebilirsiniz.

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

4
Sadece için zor bir sınır belirlemek nicegibi görünmüyor, her ikisini de ayarlamak zorunda kaldım -.
Baarn

Ubuntu 16.04'te benim için hiç çalışmıyor gibi görünüyor. Ben priority-10 ve nice-15 için ayarladım ve bir şey üzerinde "nice -n -2" kullanmaya çalıştığımda bile her zaman "izin reddedildi" olsun. Yeniden başlatmam gerekiyor mu? Bu tavsiyeye göre sadece çıkış yaptım ve tekrar giriş yaptım .
Richard Wiseman

Önceki yazımda güncelleme ... Yeniden başlattığımdan beri, priorityayarın etkili olduğunu keşfettim , ancak niceayar yalnızca önceliği azaltmama izin veriyor. Varsayılan önceliğe sahip bir şey başlattığımda, şimdi -10. Elimden reniceiçin -9 süreci ama sonra olamaz renicegeri -10.
Richard Wiseman

Güncelleme 2: Çalıştım! hardSorunlara neden olan kullanıyordu . Bunun -yerine değiştirdim ve şimdi her şey iyi çalışıyor. Bu cevap alt kısmına ulaşmama yardımcı oldu. Sanırım sorun, yoldan çıkan yumuşak bir sınırım olmasıydı, belki de bir şekilde zor sınırı aşmıştı. Her neyse, benim için düzeltmek -yerine hard.
Richard Wiseman

1

reniceOlmadan kullanmak sudoimkansız olurdu. renice(1)Adam sayfasından alıntı yapıyorum :

Süper kullanıcı dışındaki kullanıcılar yalnızca sahip oldukları işlemlerin önceliğini değiştirebilir ve hoş bir kaynak sınırı olmadığı sürece 0 ila PRIO_MAX (20) aralığında `` hoş değerlerini '' (monoton olarak) sadece monoton olarak artırabilirler. ayarlayın (Linux 2.6.12 ve üstü).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.