Nasıl güzel bir -20 değerine sahip bir işleme nasıl başlayabilir ve ona kök ayrıcalığı vermeyebilirim?


18

Güzel bir değeri -20 olan bir işleme başlamak istiyorum. Bu, - gibi bir komut kullanmamı gerektirir sudo nice -n -20 matlab. Ancak, bu matlab'ı kök olarak da başlatır. Matlab'ı root olmayan olarak kullanmanın bir yolu var mı?

Şu anki yaklaşımım - sudo nice -n -20 sudo -u myusername matlab- ki bu bana bir hack gibi görünüyor. Bunu yapmak için doğrudan bir yaklaşım var mı?


Sadece bırakabilmelisin sudo. rootkendi sürecinizi güzelleştirmek için gerekli değildir.
jordanm

8
Varsayılandan daha yüksek bir öncelik ayarlamak istiyorsanız, süper kullanıcıya ihtiyacınız vardır. (-20 en yüksek önceliktir.) Bunu yapmayı düşünebildiğim diğer tek yol başladıktan sonra sudo renice kullanmaktır. Ancak, matlab'ı etkileşimli olarak çalıştırdığınız için söylemesi yapmaktan daha kolaydır.
Alan Shutko

1
Kesmek değil, işte böyle.
Hauke ​​Laging

@jordanm - Bir sudo olmadan, bu doğru komuttur - nice -n -20 matlabve bu güzel bir çıktıdır: güzelliği ayarlayamaz: İzin reddedildi. Matlab başlar ve güzel değeri 0'dır.
Lord Loh.

@AlanShutko - system('sudo renice ...')MATLAB'da çalışabilirim , ancak matlab MATLAB ve matlab_helper olmak üzere 2 işlem başlatır. Her ikisinde de yapmak zorunda kalabilirim. ayrıca matlabpool local paralel işlemeye başladığımda tüm MATLAB işlemlerimin yüksek öncelikli olmasını istiyorum . @HaukeLaging - Haklı olduğunu düşünmeye başlıyorum.
Lord Loh.

Yanıtlar:


21

Ben normalde başlatmak ve daha sonra "renice" kullanın ...

Ancak ben işe yarar "su" ile birlikte hızlı bir kesmek yapmak mümkün:

sudo güzel -n -20 su -c command_to_run user_to_run_as

(Eğer sudo'ya bir şifre vermek zorunda değilseniz - belki de daha önce vermiş olduğunuz için - her şeyi arka plana koymak için bir "&" ekleyebilirsiniz.)

Sudo-command ile zaten root olduğunuz için, su sizden şifre istemez. X altında bir terminal öykünücüsünden bir X programı başlatabiliyordum. X programını X oturumuna sahip olan kullanıcıdan başka bir kullanıcı olarak çalıştırmak istiyorsanız, muhtemelen X'e açıkça izin vermesini söylemeniz gerekir (o kullanıcıdan X istemcileri için açık).


1
Teşekkür ederim. Bu yüzden düşündüğüm tek yolun bu olduğunu düşünüyorum.
Lord Loh.

Bu çalışıyor! Şimdi karşılaştığım tek şey, standart bir çıkışım olmaması. Bunu nasıl çözebilirim? Örneğin sudo nice -n 19 su -c $(echo "test")çıktı vermez.
DrumM

sudo nice -n 19 su -c "echo 'test'"' When you want to run a function in
Kötüum

9

Bir adım daha @Jordan, İşte sudo nice -n -xx su <username> -c matlabhack karşı zarif çözüm

Not: username = sid , matlab meta-data dir = / var / lib / matlab , nice = -10 isteğinize göre değişiklik

  1. Matlab meta veri dizini oluştur (PERPARE)

    sudo mkdir /var/lib/matlab

  2. Matlab & right persimisson başlatmak için belirtilen kullanıcıyı ekle

    sudo useradd -d / var / lib / matlab sid
    sudo chown sid: sid / var / lib / matlab
  1. Kullanıcı (sid) şifresini ayarla

    sudo passwd sid

  2. /Etc/security/limits.conf dosyasının sonuna ekleyin

    sid - priority -10

  3. Oturum açmayı otomatikleştirmek için ssh tuşunu ayarlayın ve kopyalayın (İSTEĞE BAĞLI)

    ssh-keygen -t rsa #takip şifre passcd misc   
    ssh-copy-id sid @ localhost # sid'in parolasını kullanıyor
  1. Matlab kabuk sarmalayıcısı oluşturma ( sessiz başarısız ERR'yi düzeltin )
    sudo -i
    cat> / usr / local / bin / wmatlab
    #! / bin / bash -
    # Matlab başlatmak için bir sarıcı
    / usr / local / MATLAB / <sürüm> / bin / matlab-masaüstü
    EOF
    chmod + x / usr / local / bin / wmatlab
  1. Ajust Sid'in giriş kabuğu

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

  2. Xforward ile ssh kullanarak matlab'ı başlat

    ssh -X sid@localhost


2
kabul edilen cevap bu olmalıdır.
user47093

4

Bu dosyayı /etc/security/limits.conf(en azından bazı linux dağıtımları) değiştirerek yapılabilir bulduk . Benim durumumda, basitçe ekledim

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

o zaman çalıştırabilirsin

nice -n -20 matlab


Bu değişikliği yaptıktan sonra çıkış / giriş yapmalısınız: unix.stackexchange.com/q/108603/247665
shaneb

2

@Jordanm dedi ki damla sudo. Onlara daha düşük bir öncelik vermek için kendi süreçlerinizi güzelleştirebilirsiniz:

nice -20 matlab

Hayır sudo.


Bu işe yaramadı. system('ps a -o pid -o comm -o nice')beni yakaladı 13580 MATLAB 19- MATLAB en yüksek öncelik yerine en düşük önceliğe sahip. Sorum, önceliğin nasıl artırılacağı ve azaltılamayacağıydı.
Lord Loh.

A olmadan sudobu doğru komuttur - nice -n -20 matlabve çıktı budur nice: cannot set niceness: Permission denied. Matlab başlar ve güzel değeri 0'dır.
Lord Loh.

3
OP önceliği arttırmak istemez (negatif hoş), yani. eski gösterimde "nice --20 mathlab" (çift -), yeni "nice -n -20 mathlab". Yalnızca kök negatif güzel değerler kullanabilir.
Baard Kopperud

1
CAP_SYS_NICE ayrıca OP'nin kök ayrıcalıkları olmadan bunu yapmasına izin verir, ancak Linux yeteneklerini araştırmayı içerir (pek çok insan anlayamayan ve değerinden daha fazla iş olabilir). Sadece bütünlük uğruna bahsediyorum.
Bratchley


1

pam, grup başına nice dosyasında yapılandırma dosyasını sınırlamanıza izin verir:

@grnice zor öncelik -20

@ grnice sert güzel -20

Ve sürecin grnice içinde çalıştığından emin olun.


1

Kullanıcıyı sudoers'a ekleyin (aslında, /etc/sudoers.d içinde yeni bir dosya, ancak aynı öncül):

niceuser ALL=NOPASSWD:/usr/bin/nice

Sonra, "niceuser" olarak:

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

ve ihtiyacım olan şeyi yapıyor (yani, kullanıcı şimdi {command ...} önceliğini artırabilir). Birden fazla kullanıcıyı vb. Destekler - man 5 sudoersayrıntılar için kullanın .


4
Bu hala komutu root olarak çalıştırır, ki bu posterin kaçınmaya çalıştığı şeydir.
Kyle Butt

1

Başka bir olası seçenek (basit, ancak daha az güvenli) niceyürütülebilir için setuid / setgid iznini etkinleştirmektir .

sudo chmod +s /usr/bin/nice

setuid, dosyayı rootyürütürken dosyayı dosya sahibinin etkin UID'sini (bu örnekte ) çalıştırabilen herhangi bir kullanıcıyı atar , dolayısıyla bu kullanıcı olarak çalışıyor demektir. setguid aynısını etkili GID için yapar.


Veya daha güvenli bir şekilde yapabilirsiniz:

# 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>

Yeni grubun yürürlüğe girmesi için hesabınıza tekrar giriş yapmanız gerektiğini unutmayın.

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.