Skocz do zawartości
Winkiel

Przypisanie ilości pamięci dla danego procesu.

Polecane posty

Gość patrys

Musiał byś poszukać jakiegoś programu za pomocą którego zachodziło by takie limitowanie uruchamianego procesu.

Może znajdzie się jakiś wrapper na githubie..

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki za odpowiedź panowie. Jeżeli utworzę 2 użytkowników i podzielę między nimi pamieć RAM to będę mógł odpalić ten sam proces na obu użytkownikach? To co chcę odpalić nie będzie znajdowało się na koncie żadnego z użytkowników.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Powinno się dać jeśli binarka/skrypt ma odpowiednie chmody (minimum 755). Wtedy jest to odpalane z poziomu danego usera, a zatem wszelkie limity nałożone na usera zadziałają.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zatrzymałem się w miejscu. Zrobiłem po kolei:

mkdir /mnt/cgroups/test
echo $ > /mnt/cgroups/test/tasks
echo '2G' > /mnt/cgroups/test/memory.limit_in_bytes

I nie wiem co dalej. W jaki sposób przypisać uzytkownika do grupy "test", która ma ograniczone zuzycie pamięci RAM do 2 GB?

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dziękuję. Teraz coś czego nigdy nie zrozumiem i jest to dla mnie czarną magią... W jaki sposób nadać prawa grupie tylko na wybrany przezemnie katalog i jego podkatalogi? Chodzi mi o to, że użytkownicy z grupy "test" mogą robić co chcą, ale tylko wybranym przezemnie miejscu np. /jakiś/tam/folder.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

chown -R root:jakasgrupa /jakis/tam/folder (-r -> resursive, wszystko to co tam jest też)

chmod -R 774 /jakis/tam/folder (-r -> resursive, 774 allow rwx dla roota i grupy, read dla pozostałych)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
chown -R root:test /jakis/tam/folder -r

Grupa test zostaje właścicielem "/jakis/tam/folder"

 

Po wpisaniu tego właściciel ma dostęp do "/jakis/tam/folder", a inni tylko mogą przeglądać.

chmod -R 774 /jakis/tam/folder -r

Czy może właścicielem jest root i grupa test? Wole zapytać i się czegoś nauczyć niż ślepo wpisywać polecenia.

Edytowano przez Winkiel (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W sumie ja już nie wiem o czym rozmawiamy.

Archi pisał o ulimit, tym da sie nałożyć chyba limit na usera (nie używałem, to nie jestem pewien).

 

Jesli chodzi o cgroups to zalezy jaka to dystrybucja, w redhatopodobnych są 2 demony i 2 pliki konfiguracyjne za to odpowiedzialne (cgconfig i cgred)

W jednym definiujesz polisę (grupę) (/etc/cgconfig.conf), tam wpisujesz reguły jakie dotyczą tej grupy (to nie jest grupa użytkowników w systemie, to jest grupa kontrolna). W /etc/cgrules.conf definiuje się reguły dla poszczególnych userów, czy procesów, albo procesów userów ;). Tam ustalasz w jaką grupę kontrolną jakie procesy mają wpadać.

 

Uwaga taka, że jak po uruchomieniu procesu, który objęty jest control grupami zrestartujesz demona cgconfig to juz uruchomione procesy mogą stracić limity.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie dopisuj -r, już przecież masz na początku -R, to to samo ;).

 

chown zmienia właściciela danego pliku, folderu lub folderu i wszystkiego co w nim jest (-r/-R). Każdy folder/plik w linuxie składa się z dwóch właścicieli. Właściciela czyli usera (w naszym wypadku chcemy, żeby był to root) oraz właściciela-grupy, w naszym przypadku chcemy żeby to była grupa test.

 

chmod określa dostęp właściciela, właściciela-grupy oraz całej reszty. 4 -> odczyt 2 -> zapis 1 -> wykonanie. Jeśli chcesz zmixować odczyt i wykonanie dajesz 5, jeśli chcesz zmixować wszystko dajesz 7. Ustawiając np. chmod 764 określasz, że tylko główny właściciel ma dostęp do zapisu/odczytu i wykonywania binarek, grupa ma dostęp wyłącznie do zapisu i odczytu bez wykonywania binarek (6 zamiast 7), a cała reszta, czyli userzy nieznajdujący się ani w grupie, ani nie będący właścicielem mają dostęp tylko do odczytu, jeśli chcesz im zabrać wszystko zamieniasz 4 na 0.

 

Ja to wszystko piszę na bazie ulimit - tak można też zadeklarować grupę, nie tylko pojedynczego usera. A w zasadzie to nie ma większej różnicy bo teraz rozmawiamy o accessach, a nie limitach ;).

Edytowano przez Archi (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W poście dziewiątym opisałem w jaki sposób utworzyłem grupę i nadałem jej limit pamięci. Prosze mnie poprawić jeżeli jest coś źle.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie wiem jaka to dystrybucja, w RH czy Centos grupy tworzą się same (bo jest gotowy config), a potem nowe grupy dodaje się do tego configa (/etc/cgconfig.conf).

 

Tak jak zrobiłeś też powinno działać. W RH dalej sie robic tak, ze przypisuje sie tą stworzoną grupę do procesu usera w /etc/cgrules.conf (tam jest też skrócony manual). Po ustawieniu rules trzeba zrestartowac (reload) usługę cgred. Potem jak dobrze ustawiłeś reguły to proces który chcesz ograniczać wpadnie w regułkę i będzie ograniczany. Jeszcze musisz doczytać czy akurat memory.limit_in_bytes spełni swoje zadanie.

 

po za tym to man cgconfig.conf, man cgrules.conf, man cgset, man cgget i najważniejsze man cgrulesengd.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nadal nie wiem co jest trudnego we wpisaniu:

addgroup nicwamniedam

echo '@nicwamniedam hard memlock 100000' >> /etc/security/limits.conf

adduser uzyszkodnik nicwamniedam

 

ew. jeszcze killall -u uzyszkodnik

 

Co prawda ulimit mają same w sobie pewne limity i ograniczenia (np. jeśli chodzi o forki i inne rzeczy), ale przynajmniej w większości przypadków ww. implementacja będzie wystarczająca.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Archi ja nie mam problemów. Tylko kolega coś tam wspomniał i zapytał w jaki sposób nadałem ten limit. Mój system to Ubuntu 11.10 w wersji 64 bitowej. Przy tworzeniu grup i nadaniu limitu nie było żadnych błędów. Jutro z rana sprawdzę jak to w rzeczywistości działa.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Screen to nie jest polecenie zarezerwowane dla roota, a zatem każda osoba może z niego skorzystać. Tyle, że jak działasz via ssh to musisz zalogować się od razu na danego użytkownika (a nie via su) jeśli chcesz, żeby ten screen działał. Ew. można posłużyć się rootem i sztuczką typu su user -c 'screen -dmS mojanazwa /sciezka/do/pliku.sh'.

 

Jeśli natomiast chcesz, żeby jeden użytkownik miał dostęp do outputa screena innego użytkownika to uwierz mi, że nie chcesz tego robić.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jeśli natomiast chcesz, żeby jeden użytkownik miał dostęp do outputa screena innego użytkownika to uwierz mi, że nie chcesz tego robić.

Jest to niewykonalne?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Po wpisaniu polecenia mam taką informację:

Cannot make directory '/var/run/screen': Permission denied

 

No to nie wiem jak ty tego screena zainstalowałeś skoro "standardowymi" metodami czy to via apt-get, yum czy czego tam używasz instaluje się paczka dla wszystkich.

 

Jest to niewykonalne?

 

Wykonalne jest, nadając odpowiednie prawa/accessy na odpowiedni /dev/tty kwestia jest tego rodzaju, że ani to bezpieczne, ani użyteczne. I stanowi podłoże do wielu innych problemów. O wiele łatwiej jest forwardować output screena via > /tmp/output.txt i parsować niezależnie.

Edytowano przez Archi (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Po wpisaniu polecenia mam taką informację:

Cannot make directory '/var/run/screen': Permission denied

Sprawdź czy powyższy katalog istnieje, możliwe że z jakiegoś powodu nie został utworzony, lub ma nieodpowiednie uprawnienia.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×