Sida 1 av 1

Bashscript [LÖST]

Postat: 11 jun 2008, 15:01
av Dexxa
Tjo, håller på att sätta ihop ett script,

Dator1 pingar Dator2, om Dator2 svarar händer inget med Dator1, men ifall den inte svarar så ska Dator1 stänga av sig om 20min.
Men ifall Dator2 svarar inom dom där 20min så ska den inte stänga av sig.

Hoppas ni förstår vad jag menar, lite rörigt kanske.
Mina skills när det gäller bash är inte så höga så skulle vara väldigt glad ifall någon kunde hjälpa mig,

EDIT: Har kommit en bit på vägen

#!/bin/sh

alive=`/usr/local/sbin/fping 10.32.0.9 | grep alive | wc -l`
date=`date`

if [ $alive -eq 1 ]; then
/sbin/shutdown -c && exit;
fi

/sbin/shutdown -h +20


Nu verkar det funka som det ska.

Re: Bashscript

Postat: 12 jun 2008, 15:24
av KiviE
Dexxa skrev:#!/bin/sh

alive=`/usr/local/sbin/fping 10.32.0.9 | grep alive | wc -l`
date=`date`

if [ $alive -eq 1 ]; then
/sbin/shutdown -c && exit;
fi

/sbin/shutdown -h +20
Ett tips när man lägger in kod är att använda code tagarna.

Kod: Markera allt

#!/bin/sh

alive=`/usr/local/sbin/fping 10.32.0.9 | grep alive | wc -l`
date=`date`

if [ $alive -eq 1 ]; then
   /sbin/shutdown -c && exit;
fi

/sbin/shutdown -h +20
Varför har du med date=`date`? den verkar du ju inte använda....

Kod: Markera allt

#!/bin/sh

alive=`/usr/local/sbin/fping 10.32.0.9 | grep alive | wc -l`

if [ $alive -eq 1 ];
then
   /sbin/shutdown -c
else
  /sbin/shutdown -h +20
fi

exit 0
Edit: det här medför att skriptet måste köras väldigt ofta, hur ofta har du tänkt köra det?

Re: Bashscript

Postat: 12 jun 2008, 15:41
av andol
Annars kan du testa direkt på exitkoden från fping.

Kod: Markera allt

if fping -q 10.32.0.9; then
    gör magiska saker
fi

Re: Bashscript

Postat: 12 jun 2008, 15:44
av KiviE
andol skrev:Annars kan du testa direkt på exitkoden från fping.

Kod: Markera allt

if fping -q 10.32.0.9; then
    gör magiska saker
fi
Problemet som jag ser det är att han ändå måste ha en else sats så spelar ingen större roll, antar att skriptet kommer köras var 5e minut eller så... om hosten plötsligt vaknar till liv igen så ska den avsluta avstängningen.

Fast skriptet kommer ju gå lite snabbare på ditt sätt :)

Re: Bashscript

Postat: 12 jun 2008, 15:47
av andol
Jovisst vill man ha en else-sats.

Mitt kodsnutt handlade bara om att byta ut konstruktionen alive=`kommandoharrang`.

Re: Bashscript

Postat: 12 jun 2008, 15:47
av KiviE
andol skrev:Jovisst vill man ha en else-sats.

Mitt kodsnutt handlade bara om att byta ut konstruktionen alive=`kommandoharrang`.
Kom på det ;) så la till en rad till i slutet av mitt inlägg, tänkte inte så långt ;) hehe

Re: Bashscript

Postat: 13 jun 2008, 01:07
av Dexxa
Tack så mycket för all hjälp,

EDIT:

Kod: Markera allt

#!/bin/sh

alive=`/usr/local/sbin/fping -q 10.32.0.9 | grep alive | wc -l`
if [ $alive -eq 1 ];
then

ps=`/bin/ps aux | grep shutdown -h +20 | wc -l`
if [ $ps -eq 1 ];
then
        /bin/kill $(grep /sbin/shutdown -h +20)
else
        exit;
fi

else
        /sbin/shutdown -h +20
fi

exit 0
Den här kommer inte funka så bra va :P? somsagt, försöker göra så att ifall datorn svarar på ping inom dom där 20min så ska shutdownen avbrytas.. och det har jag ingen aning om hur jag ska göra.

Re: Bashscript

Postat: 13 jun 2008, 08:31
av KiviE

Kod: Markera allt

#!/bin/sh

if fping -q 10.32.0.9;
then
   /sbin/shutdown -c
else
  /sbin/shutdown -h +20
fi

exit 0
Kommer att fungera men du måste ju köra skriptet i ett cronjob.

Funkar det inte att köra shutdown -c? eller varför försöker du döda processen?
Ska det stå +20 och inte bara 20?

Re: Bashscript

Postat: 13 jun 2008, 11:49
av Dexxa
KiviE skrev: Kommer att fungera men du måste ju köra skriptet i ett cronjob.

Funkar det inte att köra shutdown -c? eller varför försöker du döda processen?
Ska det stå +20 och inte bara 20?
Ja, Jag kör scriptet i cronjob. anledningen till att jag kör +20 är att freebsd vill att det ska vara så för att funka :P, och shutdown -c funkar inte i freebsd, det är därför jag kör /bin/kill $(grep /sbin/shutdown -h +20)

EDIT: kom på att det är lite smartare att köra /usr/bin/pkill shutdown istället för /bin/kill $(grep /sbin/shutdown -h +20)

EDIT2: Nu funkar sciptet precis som jag vill, tack för all hjälp, så här ser det ut för tillfället

Kod: Markera allt

#!/bin/sh

if /usr/local/sbin/fping -q 10.32.0.1;
then
  /usr/bin/pkill shutdown
else
  /sbin/shutdown -h +20
fi

exit 0