Sziasztok!
Ti hogyan oldanátok meg a következőt:
Adott pár user (változó user szám) egy eléggé elcseszett programmal, ami random indokolatlanul elkezdi a cput pörgetni. Ha lekorlátozom a cpu használatot cpulimittel, akkor is tökéletesen és ugyan úgy fut a program.
Cél: Egy olyan bash scriptet szeretnék írni, ami cronal óránként lefut. (pid szam megvan mivel alapból úgy indítom a programot h generáljon egy filet amiben benne van az adott program pid szama) és bekorlátozza a cput 10%-ra.
A program egy adott userkent fut.
Odáig eljutottam, hogy usereket hogy listázom ki egy fájlba. cd /home/program/userek; ls >userek
User pid: /home/program/user/xxx.pid
Sajnos ehhez a szinthez még elég low vagyok.
Élőrre is köszi minden commentet.
- 4928 megtekintés
Hozzászólások
Nem nagyon értem, hogy pontosan mit is akarsz...
FathoM
- A hozzászóláshoz be kell jelentkezni
Egy olyan bash szkriptet összehozni ami ki olvassa minden usertől a pidet.
/home/program/$user/xxx.pid
és lefuttatja a következő parancsot minden usernal
cpulimit -p $pid -l 10
- A hozzászóláshoz be kell jelentkezni
ezért a bash szakértők a fejemet veszik tutira, de fejből erre futotta...
for i in $(ls /home/program/user/*.pid)
do
pid=`cat $i`
cpulimit -p $pid -l 10
done
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
koszonom a segitseged.
Annyi a problema hogy az /user/ valtozo. :S
Tehat a lenyek, hogy /home/program/ alatt keresse az összes .pid filet (almappakban is)
- A hozzászóláshoz be kell jelentkezni
for i in $(ls /home/program/*/*.pid)
do
pid=`cat $i`
cpulimit -p $pid -l 10
done
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Ez már majdnem működő megoldás :)
A következő problémával :(
s1:/home/.....: ./cpulimit.sh
Warning: no target process found. Waiting for it...
^CExiting...
Warning: no target process found. Waiting for it...
^CExiting...
Process 2465 detected
^CExiting...
Process 2483 detected
^CExiting...
Process 2555 detected
^CExiting...
Process 2627 detected
^CExiting...
Warning: no target process found. Waiting for it...
^CExiting...
Warning: no target process found. Waiting for it...
^CExiting...
Process 2573 detected
^CExiting...
Process 1919 detected
^CExiting...
Warning: no target process found. Waiting for it...
^CExiting...
Process 2519 detected
^CExiting...
Process 2609 detected
^CExiting...
Process 5084 detected
^CExiting...
Process 2537 detected
^CExiting...
Warning: no target process found. Waiting for it...
^CExiting...
Warning: no target process found. Waiting for it...
^CExiting...
Ha jól értelmezem akk ami nem fut ott elakad, illetve ha talál futót akkor sem ugrik a következőre.
- A hozzászóláshoz be kell jelentkezni
sanszosan a ls /home/program/ alatt vannak olyan könyvtárak is, ahol nem a userek vannak hanem egyéb, és ott nem talál .pid filet...
innen rád bízom, vagy a for ciklust rakod rendbe, vagy a könyvárstruktúrát.. :)
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
A probléma az, hogy a cpulimit nem tér vissza.
Tehát, ha simán consolba beírom:
s1:/home/user/....#
cpulimit -p 5733 -l 10
Process 5733 detected
Nem tér vissza bashba. Másik drotos megoldás ha mindegyik cpulimitet screenbe küldeném. De szerintem az eléggé cigány megoldás :(
- A hozzászóláshoz be kell jelentkezni
nohup cpulimit -p 5733 -l 10 2>&1 &
- A hozzászóláshoz be kell jelentkezni
Thx megy is a script mint a karika csapas. Ma is sokat tanultam.
- A hozzászóláshoz be kell jelentkezni
Fejet ugyan nem vennék, de azért...
"for i in $(ls /home/program/user/*.pid)"
for i in /home/program/user/*.pid
Egyrészt hogy legyen esély lekezelni, ha netán egyik-másik file nevében lenne szóköz, másrészt mert olcsóbb, mivel se subshell, se ls.
"pid=`cat $i`"
read pid <"$i"/pid
Az okok nagyjából ugyanazok, mint fentebb: ez működik akkor is, ha szóköz van a file nevében, és olcsóbb, mert nincs se subshell, se cat.
- A hozzászóláshoz be kell jelentkezni
En inkabb a nice-al probalkoznek...
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Probaltam :S Annyit ertem el vele, hogy apache stb nem lassul be, de sajnos a cpu fullon pörög.
- A hozzászóláshoz be kell jelentkezni
De mi akadályoz meg abban, hogy a programot elugd és betekerd egy wrapper szkriptbe, ami indításkor azonnal ráncba szedi a processzt, ahelyett, hogy cronból vadászod le?
- A hozzászóláshoz be kell jelentkezni
Szimplan tanulas, van 1 konyvem bashbol. Amit forgatok is, csak vegig adat feldolgozasrol van benne szo. Adat begyujtesrol kb egy szo sincs. :(:(
- A hozzászóláshoz be kell jelentkezni
Amit írok, az tkp. csak annyit jelent, hogy az eredeti programot elteszed egy PATH által nem érintett könyvtárba, és a helyére teszel egy szkriptet, ami az eredetit abszolút könyvtárakkal elindítja, és el is végzi azon ugyanazokat a cpu-korlátozásokat, amelyeket cronból kötegelve teszel meg az előző futás óta indítottakkal.
A wrapper másik módja az alias használata (feltételezi, hogy nem fogja elrontani senki a környezetet). Pl.:
alias mc='/usr/local/bin/nemisazmcindulhanemendemajdaztisinditom.sh'
- A hozzászóláshoz be kell jelentkezni