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