spustit aplikaci kdyz je pocitac idle
Vaclav Stepan
w na zona64.cz
Středa Červen 15 13:59:34 CEST 2005
> Mam pocitac, ktery je obcas volny (nikdo na nem neni prihlaseny pres
> konzoli ani pres ssh). Chtel bych na nem v takovy okamzik spustit
> vybranou aplikaci, ale v momente, kdy se nekdo prihlasi bych ji chtel
> zavrit. Hledal jsem nejaky takovy idle manager, ale nic jsem nenasel.
Spuštění příkazu, když load klesne pod nějakou úroveň, můžete provést
přes batch (viz man batch). Používá to at démona (tj. ten musi bezet).
Co se zastavení při přihlášení týče --- pokud víte, co spouštíte,
můžete při přihlášení program zabít (viz kill, killall, pidof),
nebo ho zastavit (přes kill mu pošlete signál STOP) a pak
ho zase pustíte (signál CONT) pri odhlaseni.
Pokud byste chtel, aby program bezel jen kdyz je load CPU mensi nez
neco,
muzete pouzit neco jako nasledujici skript, nebo treba loadwatch (ktery
IMHO
dela zhruba totez).
Jinak se kouknete na prikazy kill, skill, killall.
--cut here--
#!/bin/bash
PROGRAM=burnP6
# 100*limit pro load (50=0.5) kdyz bezi a nebezi
LIMIT[0]=130
LIMIT[1]=50
# Stavy
STAV[0]="Bezi"
STAV[1]="Ceka"
# Pustime ho na pozadi s nizkou prioritou
echo Spoustim $PROGRAM
/usr/bin/nice -20 $PROGRAM &
STOPPED=0;
# Dokud bezi
while ( pidof $PROGRAM )
do
LOAD=`/usr/bin/cut -f 1 -d ' ' /proc/loadavg` # load za posledni
minutu
LOAD=`echo 100*$LOAD | bc | cut -f 1 -d '.'` # prevedeme na int
echo Stav: ${STAV[$STOPPED]}, load je $LOAD a limit je
${LIMIT[$STOPPED]}
if [ $STOPPED -eq 0 ] then
if [ $LOAD -gt ${LIMIT[0]} ]; then
echo Zastavuji...
/usr/bin/killall -STOP $PROGRAM
STOPPED=1
fi
else
if [ $LOAD -lt ${LIMIT[1]} ]; then # Pustit
echo Poustim...
/usr/bin/killall -CONT $PROGRAM
STOPPED=0
fi
fi
# Chvilku pockame
/bin/sleep 10
done
--cut here--
Pekny den
Václav Štěpán
--
Vaclav Stepan
w na linux.fjfi.cvut.cz
http://linux.fjfi.cvut.cz/~w/
Další informace o konferenci Linux