मैं -20 के अच्छे मूल्य के साथ एक प्रक्रिया कैसे शुरू करूं और इसे मूल विशेषाधिकार नहीं दूं?


18

मैं -20 के अच्छे मूल्य के साथ एक प्रक्रिया शुरू करना चाहता हूं। इसके लिए मुझे कमांड का उपयोग करने की आवश्यकता है जैसे - sudo nice -n -20 matlab। हालाँकि, यह जड़ के रूप में भी मटलब को शुरू करता है। वहाँ एक तरह से गैर जड़ के रूप में matlab है?

मेरा वर्तमान तरीका है - sudo nice -n -20 sudo -u myusername matlab- जो, मेरे लिए हैक की तरह दिखता है। क्या ऐसा करने के लिए एक सीधा दृष्टिकोण है?


आप बस ड्रॉप करने में सक्षम होना चाहिए sudorootअपनी प्रक्रिया को अच्छा करने की जरूरत नहीं है।
जोर्डनम

8
यदि आप डिफ़ॉल्ट से अधिक प्राथमिकता निर्धारित करना चाहते हैं, तो आपको सुपरयुसर की आवश्यकता है। (-20 सर्वोच्च प्राथमिकता है।) इसे शुरू करने के बाद मैं इसे करने के लिए केवल एक और तरीका सोच सकता हूं कि यह सूडो के लिए किया जाएगा। हालाँकि, चूंकि आप matlab को अंतःक्रियात्मक रूप से चला रहे हैं, इसलिए ऐसा करना आसान है।
एलन शटको

1
हैक नहीं, वह रास्ता है।
हौके लैगिंग

@jordanm - सुडो के बिना, यह सही कमांड है - nice -n -20 matlabऔर यह आउटपुट अच्छा है: अच्छाई सेट नहीं कर सकता: अनुमति से इनकार किया। मतलाब शुरू होता है और अच्छा मूल्य 0. है
भगवान लोह।

@AlanShutko - मैं system('sudo renice ...')MATLAB में चला सकता हूं , लेकिन matlab 2 प्रक्रियाएं शुरू करता है - MATLAB और matlab_helper। मुझे यह दोनों पर करना पड़ सकता है। इसके अलावा, मैं यह भी चाहता हूं कि मेरी सभी MATLAB प्रक्रियाएं उच्च प्राथमिकता की हों - जब मैं matlabpool local समानांतर प्रसंस्करण के लिए शुरू करता हूं । @ हॉकिंग - मुझे लगता है कि आप सही हैं।
भगवान लोह।

जवाबों:


21

मैं इसे सामान्य रूप से शुरू करूंगा और "बाद में" का उपयोग करूंगा ...

हालाँकि मैं "सु" के साथ मिलकर एक त्वरित हैक करने में सक्षम था जो काम करता है:

sudo nice -n -20 su -c command_to_run user_to_run_as

(यदि आपको sudo को पासवर्ड नहीं देना है - शायद इसलिए कि आपने पहले ही इसे दे दिया है - आप पृष्ठभूमि में पूरी चीज़ डालने के लिए "और" जोड़ सकते हैं।)

चूंकि आप पहले से ही sudo- कमांड के साथ रूट हो गए हैं, इसलिए su आपसे पासवर्ड नहीं मांगेगा। मैं X- के तहत एक टर्मिनल-एमुलेटर से एक एक्स-प्रोग्राम शुरू करने में सक्षम था। यदि आप एक्स-प्रोग्राम को चलाने वाले उपयोगकर्ता की तुलना में किसी अन्य उपयोगकर्ता के रूप में एक्स-प्रोग्राम को चलाना चाहते हैं, तो आपको एक्स को अनुमति देने के लिए स्पष्ट रूप से बताना होगा। (उस उपयोगकर्ता से एक्स-क्लाइंट के लिए खुला)।


1
धन्यवाद। इसलिए मुझे लगता है कि जिस तरह से मैंने सोचा था कि वह करने का एकमात्र तरीका था।
भगवान लोह।

यह काम! अब मेरे पास केवल एक चीज यह है कि मेरे पास कोई मानक आउटपुट नहीं है। इसे कैसे हल करें? जैसे sudo nice -n 19 su -c $(echo "test")कोई आउटपुट नहीं देता।
ढोलकिया

मेरा बुरा, आपको 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

9

एक कदम आगे @ जोर्डन, यहाँ sudo nice -n -xx su <username> -c matlabहैक के खिलाफ सुरुचिपूर्ण समाधान है

नोट: उपयोगकर्ता नाम = किनारा , matlab मेटा-डेटा dir = / var / lib / matlab का उपयोग करना , आपकी इच्छा के लिए अच्छा -10 परिवर्तन

  1. Matlab मेटा-डेटा dir (PERPARE) बनाएं

    sudo mkdir /var/lib/matlab

  2. Matlab & right Persimisson लॉन्च करने के लिए निर्दिष्ट उपयोगकर्ता जोड़ें

    sudo useradd -d / var / lib / matlab sid
    sudo chown सिड: sid / var / lib / matlab
  1. उपयोगकर्ता (साइड) पासवर्ड सेट करें

    sudo passwd sid

  2. /Etc/security/limits.conf का अनुसरण करें

    sid - priority -10

  3. लॉगिन को स्वचालित करने के लिए सेटअप और कॉपी ssh-key (वैकल्पिक)

    ssh-keygen -t rsa # फॉलिंग कुंजी पासवार्ड मिस   
    ssh-copy-id sid @ localhost #useing सिड का पासवार्ड
  1. मैटलैब शेल आवरण बनाएँ (फिक्स साइलेंट फेल ईआरआर )
    सूदो -आई
    बिल्ली> / usr / स्थानीय / बिन / wmatlab
    #! / बिन / बैश -
    # मैटलैब लॉन्च करने के लिए एक रैपर
    / usr / स्थानीय / MATLAB / <संस्करण> / बिन / matlab -desktop
    EOF
    chmod + x / usr / स्थानीय / बिन / wmatlab
  1. एविड सिड का लॉगिन शेल

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

  2. Xforward के साथ ssh का उपयोग करके matlab शुरू करें

    ssh -X sid@localhost


2
यह स्वीकृत उत्तर होना चाहिए।
234 बजे user47093

4

मैंने पाया है कि यह फ़ाइल को संशोधित करके /etc/security/limits.conf(कम से कम कुछ लिनक्स डिस्ट्रोस पर) किया जा सकता है । मेरे मामले में, मैंने बस जोड़ा

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

तो आप निष्पादित कर सकते हैं

nice -n -20 matlab


इस परिवर्तन को करने के बाद, लॉग आउट / फिर से करें: unix.stackexchange.com/q/108603/247665
shaneb

2

जैसा कि @jordanm ने कहा कि ड्रॉप सूडो। आप उन्हें कम प्राथमिकता देने के लिए अपनी स्वयं की प्रक्रियाओं को अच्छा कर सकते हैं:

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 denied। मतलाब शुरू होता है और अच्छा मूल्य 0. है
भगवान लोह।

3
ओपी प्राथमिकता (नकारात्मक अच्छा) नहीं बढ़ाना चाहता है , अर्थात। पुराने नोटेशन में "नाइस --20 मैथलैब" (डबल -), नए में "गुड-एन -20 मैथलैब"। केवल रूट नकारात्मक अच्छे-मूल्यों का उपयोग कर सकता है।
बार्ड कोपरपुड

1
CAP_SYS_NICE ओपी को रूट विशेषाधिकारों के बिना भी ऐसा करने की अनुमति देगा, लेकिन इसमें लिनक्स क्षमताओं को शामिल करना शामिल है (बहुत से लोग समझ नहीं पाते हैं और इससे अधिक काम हो सकता है)। मैं सिर्फ पूर्णता के लिए इसका उल्लेख करता हूं।
ब्राचली


1

pam आपको प्रति समूह इसकी कॉन्फ़िगरेशन फ़ाइल के लिए अच्छा सीमा निर्धारित करने की अनुमति देता है:

@ तीखी प्राथमिकता प्राथमिकता -20

@ तीखा कठिन अच्छा -20

और सुनिश्चित करें कि समूह ग्रनिस में प्रक्रिया चलाता है।


1

उपयोगकर्ता को sudoers में जोड़ें (वास्तव में, /etc/sudoers.d में एक नई फ़ाइल, लेकिन इसका वही आधार है):

niceuser ALL=NOPASSWD:/usr/bin/nice

फिर, "अच्छाई" के रूप में:

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

और यह वही करता है जो मुझे चाहिए (अर्थात, मेरा उपयोगकर्ता अब {कमांड ...}) की प्राथमिकता बढ़ा सकता है। यह कई उपयोगकर्ताओं का समर्थन करता है, आदि - man 5 sudoersविवरण के लिए उपयोग करें।


4
वह अभी भी रूट के रूप में कमांड चलाता है, जो कि पोस्टर से बचने की कोशिश कर रहा है।
काइल बट

1

एक अन्य संभावित विकल्प (सरल, लेकिन कम सुरक्षित) niceनिष्पादन योग्य के लिए सेट्यूड / सेटगिड अनुमति को सक्षम करना है ।

sudo chmod +s /usr/bin/nice

setuid किसी भी उपयोगकर्ता को असाइन करता है जो फ़ाइल को निष्पादित करते समय फ़ाइल के मालिक के प्रभावी यूआईडी को निष्पादित कर सकता है (इस मामले में 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>

नए समूह को प्रभावी होने के लिए आपको अपने खाते को पुनः लॉगिन करने की आवश्यकता है।

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