मैं किसी उपयोगकर्ता को नकारात्मक निष्पक्षता की प्रक्रिया को प्राथमिकता देने की अनुमति कैसे दे सकता हूं?


12

मैं चाहता हूं कि एक उपयोगकर्ता नकारात्मक अच्छा मूल्य के साथ सिस्टम पर एक विशिष्ट प्रक्रिया चलाए। मैं केवल पृष्ठभूमि के लिए प्रक्रिया को कांटा नहीं कर सकता क्योंकि यह विशिष्ट कार्यक्रम एक मिनिक्राफ्ट सर्वर है और मैं सर्वर को नियंत्रित करने के लिए कमांड लाइन पर भरोसा करता हूं।

मेरी वर्तमान बैश स्क्रिप्ट इस तरह दिखती है (महत्वपूर्ण हिस्सा):

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    

sleepबस के निष्पादन में देरी renicereniceखुद का उपयोग करता psहै एक जावा प्रक्रिया के लिए जाँच करने के लिए उपयोगकर्ताओं को स्वयं आईडी का उपयोग करता है। विभिन्न उपयोगकर्ताओं के अंतर्गत जावा स्पॉनिंग के अन्य उदाहरण हो सकते हैं, लेकिन मिनीक्राफ्ट सर्वर अपने स्वयं के उपयोगकर्ता मिनीक्राफ्ट के तहत चलता है ।

मैं स्पष्ट रूप से हर बार जब मैं सर्वर शुरू करता हूं, तो पासवर्ड दर्ज नहीं करना चाहता।
से / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

क्या ऐसा करने का एक और अधिक सुरुचिपूर्ण तरीका है? बस NOPASSWD के साथ संयोजन में उपयोग niceकरना एक विकल्प नहीं है : विकल्प एक महान सुरक्षा मुद्दा होगा।sudo nice bash

जवाबों:


9

Pam_limits.so मॉड्यूल आपकी वहां मदद कर सकता है।

यह आपको विशिष्ट व्यक्तिगत उपयोगकर्ताओं और समूहों या वाइल्डकार्ड या उपयोगकर्ताओं और समूहों की श्रेणियों पर कुछ सीमाएं निर्धारित करने की अनुमति देता है।

आप जो सीमाएँ निर्धारित कर सकते हैं वे आम तौर पर ulimit सेटिंग्स हैं, लेकिन समवर्ती लॉगिन सत्रों, प्रक्रियाओं, CPU समय, डिफ़ॉल्ट प्राथमिकता और अधिकतम प्राथमिकता (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ऐसा करना प्रतीत नहीं होता है, मुझे दोनों का उपयोग करके सेट करना पड़ा -
बार्न

लगता है मेरे लिए Ubuntu 16.04 पर बिल्कुल काम नहीं करता। मैंने priority-10 और nice-15 पर सेट किया है और मुझे हमेशा "अनुमति अस्वीकृत" मिलती है, तब भी जब मैं किसी चीज़ पर "अच्छा -n -2" का उपयोग करने की कोशिश करता हूं। क्या मुझे रिबूट करना है? मैंने बस सलाह के अनुसार और फिर से लॉग आउट किया ।
रिचर्ड विजमैन

मेरी पिछली पोस्ट पर अपडेट करें ... रिबूट करने के बाद से मैंने पाया है कि priorityसेटिंग का प्रभाव पड़ता है, लेकिन niceसेटिंग केवल मुझे प्राथमिकता को कम करने की अनुमति देती है। जब मैं डिफ़ॉल्ट प्राथमिकता के साथ कुछ शुरू करता हूं, तो यह अब -10 है। मैं renice-9 की प्रक्रिया कर सकता हूं , लेकिन फिर reniceइसे -10 पर वापस नहीं ला सकता ।
रिचर्ड वाइसमैन

अद्यतन 2: मैंने इसे काम किया है! यह उपयोग कर रहा था hardकि समस्याओं का कारण बना। मैंने इसे -बदले और सभी अब ठीक काम करता है। इस जवाब ने मुझे इसकी तह तक पहुंचने में मदद की। मुझे लगता है कि समस्या यह थी कि मेरे पास एक नरम सीमा थी जो रास्ते में हो रही थी, शायद किसी तरह कठिन सीमा को पार कर रही थी। वैसे भी, मेरे लिए इसे तय -करने के बजाय hard
रिचर्ड विस्मैन

1

reniceबिना उपयोग sudoअसंभव होगा। मैं renice(1)आदमी पृष्ठ से बोली :

सुपर-उपयोगकर्ता के अलावा अन्य उपयोगकर्ता केवल अपनी स्वयं की प्रक्रियाओं की प्राथमिकता को बदल सकते हैं, और केवल 0 से PRIO_MAX (20) के भीतर सीमा तक (सुरक्षा कारणों से) अपने `अच्छे मूल्य 'को बढ़ा सकते हैं, जब तक कि एक अच्छी संसाधन सीमा न हो सेट (लिनक्स 2.6.12 और उच्चतर)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.