Bagaimana saya bisa mengizinkan pengguna untuk memprioritaskan proses ke kebaikan negatif?


12

Saya ingin pengguna menjalankan proses tertentu pada sistem dengan nilai bagus negatif. Saya tidak bisa begitu saja memotong proses ke latar belakang karena program khusus ini adalah server minecraft dan saya mengandalkan baris perintah untuk mengontrol server.

Skrip bash saya saat ini terlihat seperti ini (bagian penting):

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    

sleephanya menunda eksekusi renice. reniceitu sendiri digunakan psuntuk memeriksa proses java menggunakan ID pengguna sendiri. Mungkin ada contoh lain dari pemijahan java di bawah pengguna yang berbeda, tetapi server minecraft berjalan di bawah minecraft penggunanya sendiri .

Saya jelas tidak ingin memasukkan kata sandi setiap kali saya memulai server.
dari / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

Apakah ada cara yang lebih elegan untuk melakukan ini? Cukup menggunakan nicebukanlah suatu pilihan, sudo nice bashdalam kombinasi dengan opsi NOPASSWD: akan menjadi masalah keamanan yang hebat.

Jawaban:


9

Modul pam_limits.so dapat membantu Anda di sana.

Ini memungkinkan Anda untuk menetapkan batas tertentu pada pengguna dan grup tertentu atau wildcard atau rentang pengguna dan grup.

Batas yang dapat Anda tetapkan biasanya pengaturan ulimit tetapi juga pada jumlah sesi login bersamaan, proses, waktu CPU, prioritas default dan prioritas maksimum (renice). Periksa halaman manual limit.conf untuk informasi lebih lanjut.

Misalnya, Anda dapat mengonfigurasi grup mindcraft Anda untuk memulai semua prosesnya dengan prioritas default yang ditingkatkan dan Anda dapat memperbolehkan mereka untuk menggunakan perintah yang bagus dan mengganti nama untuk meningkatkan prioritas pekerjaan penting mereka secara manual juga alih-alih hanya mengurangi prioritas.

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

4
Pengaturan hanya batas keras untuk nicesepertinya tidak melakukannya, saya harus mengatur keduanya, menggunakan -.
Baarn

Sepertinya tidak bekerja untuk saya sama sekali di Ubuntu 16.04. Saya telah menetapkan priorityke -10 dan niceke -15 dan saya selalu mendapatkan "izin ditolak" bahkan ketika saya mencoba menggunakan "bagus -n -2" pada sesuatu. Apakah saya harus reboot? Saya baru saja keluar dan masuk lagi sesuai saran ini .
Richard Wiseman

Perbarui pada posting saya sebelumnya ... Sejak me-reboot saya menemukan bahwa prioritypengaturan memang memiliki efek, tetapi nicepengaturan hanya memungkinkan saya untuk mengurangi prioritas. Ketika saya memulai sesuatu dengan prioritas default, sekarang -10. Saya bisa reniceproses ke -9 tapi kemudian tidak bisa renicekembali ke -10.
Richard Wiseman

Pembaruan 2: Saya sudah mengatasinya! Itu menggunakan hardyang menyebabkan masalah. Saya mengubahnya sebagai -gantinya dan semua berfungsi dengan baik sekarang. Jawaban ini membantu saya sampai ke dasarnya. Saya pikir masalahnya adalah bahwa saya memiliki batas lunak yang menghalangi, mungkin mengalahkan batas keras entah bagaimana. Pokoknya, -bukannya hardmemperbaikinya untukku.
Richard Wiseman

1

Menggunakan renicetanpa sudoakan mustahil. Saya mengutip dari renice(1)halaman manual:

Pengguna selain pengguna super hanya dapat mengubah prioritas proses yang mereka miliki, dan hanya dapat secara monoton meningkatkan `` nilai bagus '' (untuk alasan keamanan) dalam kisaran 0 hingga PRIO_MAX (20), kecuali batas sumber daya yang bagus adalah set (Linux 2.6.12 dan lebih tinggi).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.