/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
shell script der kører i løkke går ned
Fra : Michael


Dato : 05-03-04 19:32

Har et lille script

/root/script.sh:

#!/bin/sh
/usr/bin/php /home/scripts/doit.php
sleep 10;
/root/scripts.sh

Jeg starter 2 forskellige der er næsten ens. Det mærkelige er at scriptene
dør efter en periode på omkring 8-12 timer.

Hvad kan det skyldes?

Er der nogen bedre alternativer at gøre det på? Istedet for at løre mit PHP
script i en løkke, ville jeg gerne genstarte det for at undgå memory leaks
m.m.

Nogen der kan hjælpe?

--
mvh



 
 
FePe (05-03-2004)
Kommentar
Fra : FePe


Dato : 05-03-04 20:01

Michael wrote:

> Har et lille script
>
> /root/script.sh:
>
> #!/bin/sh
> /usr/bin/php /home/scripts/doit.php
> sleep 10;
> /root/scripts.sh
>
> Jeg starter 2 forskellige der er næsten ens. Det mærkelige er at scriptene
> dør efter en periode på omkring 8-12 timer.
>
> Hvad kan det skyldes?
>
> Er der nogen bedre alternativer at gøre det på? Istedet for at løre mit PHP
> script i en løkke, ville jeg gerne genstarte det for at undgå memory leaks
> m.m.
>
> Nogen der kan hjælpe?

Hvorfor vil du køre programmet igen og igen? Hvis du vil have programmet i en
løkke, så er det nok bedre at rykke ud til en løkke i kommandolinjen; så undgår
du (så vidt jeg ved) memory leaks.

Mvh. FePe.
--
Lægerne anbefaler: at man ser mindst 14 timers Simpsons hver dag.



Klaus Ellegaard (05-03-2004)
Kommentar
Fra : Klaus Ellegaard


Dato : 05-03-04 20:39

FePe <fepe@SLETtiscali.dk> writes:

>Hvorfor vil du køre programmet igen og igen? Hvis du vil have programmet i en
>løkke, så er det nok bedre at rykke ud til en løkke i kommandolinjen; så undgår
>du (så vidt jeg ved) memory leaks.

Snæh... hvorfor skulle det gøre nogen forskel? Fortolkningen er
100% den samme.

Mvh.
   Klaus.

Klaus Ellegaard (05-03-2004)
Kommentar
Fra : Klaus Ellegaard


Dato : 05-03-04 20:38

"Michael" <maskinen2000@hotmail.com> writes:

>Jeg starter 2 forskellige der er næsten ens. Det mærkelige er at scriptene
>dør efter en periode på omkring 8-12 timer.

>Hvad kan det skyldes?

Du løber tør for stack space. Når du kører et program i et program,
svarer det til at lave en GOSUB i BASIC.

>Er der nogen bedre alternativer at gøre det på?

while sleep 10
do
   /root/whatnot/script.sh
done

Det virker, fordi "sleep 10" vil returnere 0 (TRUE), når den er
færdig med at vente. Samtidig er det en ren løkke. Der er ikke
noget, der bliver tilføjet til stakken hele tiden.

Mvh.
   Klaus.

Michael (05-03-2004)
Kommentar
Fra : Michael


Dato : 05-03-04 21:13

"Klaus Ellegaard" <klausellegaard@msn.com> skrev i en meddelelse
news:c2akuq$mao$1@news.klen.dk...
> >Hvad kan det skyldes?
>
> Du løber tør for stack space. Når du kører et program i et program,
> svarer det til at lave en GOSUB i BASIC.

ok tak. prøver jeres alternativ, så må jeg se om det giver mig en rolig
nattesøvn :)

--
Mvh



Niels Elgaard Larsen (05-03-2004)
Kommentar
Fra : Niels Elgaard Larsen


Dato : 05-03-04 22:37

Klaus Ellegaard wrote:

>>Er der nogen bedre alternativer at gøre det på?
>
> while sleep 10
> do
> /root/whatnot/script.sh
> done
>
> Det virker, fordi "sleep 10" vil returnere 0 (TRUE), når den er
> færdig med at vente.

Men ikke hvis den stopper pga et signal.
Det er nok bedre at bruge en "while true .."
> Samtidig er det en ren løkke. Der er ikke
> noget, der bliver tilføjet til stakken hele tiden.


--
Niels Elgaard Larsen
http://www.agol.dk/elgaard

Klaus Ellegaard (05-03-2004)
Kommentar
Fra : Klaus Ellegaard


Dato : 05-03-04 22:48

Niels Elgaard Larsen <elgaard@diku.dk> writes:

>> Det virker, fordi "sleep 10" vil returnere 0 (TRUE), når den er
>> færdig med at vente.

>Men ikke hvis den stopper pga et signal.

Præcis - nem måde at stoppe skidtet kontrolleret.

Mvh.
   Klaus.

Adam Sjøgren (05-03-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 05-03-04 20:44

On Fri, 5 Mar 2004 19:32:10 +0100, Michael wrote:

> Har et lille script /root/script.sh:

> #!/bin/sh
> /usr/bin/php /home/scripts/doit.php
> sleep 10;
> /root/scripts.sh

Jeg går ud fra at scriptet kalder sig selv (på trods at s'et)?

Dvs. du har et script, som kalder et script, som kalder et script, som
kalder et script etc. etc. etc. - men ingen af dem afsluttes
nogensinde!

/root/script.sh
+- /root/script.sh
+- /root/script.sh
etc.
etc.
etc.
etc

Det er ikke så holdbart i længden.

Prøv:

#!/bin/sh

while ((1)); do
/usr/bin/php /home/scripts/doit.php
sleep 10;
done

Eller læs crontab(5).

> Er der nogen bedre alternativer at gøre det på? Istedet for at løre
> mit PHP script i en løkke, ville jeg gerne genstarte det for at
> undgå memory leaks m.m.

Ahva?


Mvh.

--
"Mr. Cotton's... parrot. Same question." Adam Sjøgren
asjo@koldfront.dk

Michael (05-03-2004)
Kommentar
Fra : Michael


Dato : 05-03-04 21:48

"Adam Sjøgren" <spamtrap@koldfront.dk> skrev i en meddelelse
news:87wu5z13l8.fsf@virgil.koldfront.dk...
> #!/bin/sh
>
> while ((1)); do
> /usr/bin/php /home/scripts/doit.php
> sleep 10;
> done

Prøvede ovenstående. Ser ud til at det lukker, hvis jeg lukker min ssh
forbindelse ned. Kan det være korrekt?

--
Mvh



Adam Sjøgren (05-03-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 05-03-04 21:52

On Fri, 5 Mar 2004 21:47:56 +0100, Michael wrote:

>> while ((1)); do /usr/bin/php /home/scripts/doit.php sleep 10; done

> Prøvede ovenstående. Ser ud til at det lukker, hvis jeg lukker min
> ssh forbindelse ned. Kan det være korrekt?

Sikkert. Se nohup(1).

Eller crontab(5).


Mvh.

--
"Mr. Cotton's... parrot. Same question." Adam Sjøgren
asjo@koldfront.dk

Niels Callesøe (05-03-2004)
Kommentar
Fra : Niels Callesøe


Dato : 05-03-04 21:58

Adam Sjøgren wrote in <news:871xo710gw.fsf@virgil.koldfront.dk>:

>>> while ((1)); do /usr/bin/php /home/scripts/doit.php sleep 10; done
>
>> Prøvede ovenstående. Ser ud til at det lukker, hvis jeg lukker min
>> ssh forbindelse ned. Kan det være korrekt?
>
> Sikkert. Se nohup(1).
>
> Eller crontab(5).

Eller supervise fra daemontools (selvom det måske er overkill).

--
Niels Callesøe - dk pfy @work
pfy[at]nntp.dk - http://www.pcpower.dk/disclaimer.php

Learn Postfix; live Postfix; love Postfix.

Peter Jensen (05-03-2004)
Kommentar
Fra : Peter Jensen


Dato : 05-03-04 23:13

Niels Callesøe wrote:

>>> Prøvede ovenstående. Ser ud til at det lukker, hvis jeg lukker min
>>> ssh forbindelse ned. Kan det være korrekt?
>>
>> Sikkert. Se nohup(1).
>>
>> Eller crontab(5).
>
> Eller supervise fra daemontools (selvom det måske er overkill).

Eller screen(1).

--
PeKaJe

I just had a NOSE JOB!!

Peter Makholm (06-03-2004)
Kommentar
Fra : Peter Makholm


Dato : 06-03-04 06:37

Peter Jensen <usenet@pekajemaps.homeip.net> writes:

> Eller screen(1).

Screen er et sejt program og jeg kunne ikke leve uden det, men jeg
synes at screen har fået lidt for stor udbredelse som universalløsning
på alle mulige problemer.

Screen skal bruges hvis man vil kunne detatche og reatatche
interaktive programmer eller man vil multiplekse flere terminaler over
en forbindelse. Bare at bruge screen fordi man ikke kan finde ud af at
køre et program i baggrunden er overkill.

--
Peter Makholm | What if:
peter@makholm.net | IBM bought Xenix from Microsoft instead of buying
http://hacking.dk | DOS?

Michael Zedeler (08-03-2004)
Kommentar
Fra : Michael Zedeler


Dato : 08-03-04 19:04

Adam Sjøgren wrote:

> On Fri, 5 Mar 2004 19:32:10 +0100, Michael wrote:
>
>>Har et lille script /root/script.sh:
> [klip]
>
> Dvs. du har et script, som kalder et script, som kalder et script, som
> kalder et script etc. etc. etc. - men ingen af dem afsluttes
> nogensinde!
>
> /root/script.sh
> +- /root/script.sh
> +- /root/script.sh
> etc.
> etc.
> etc.
> etc
>
> Det er ikke så holdbart i længden.

Advarsel: fjollet og potentielt farligt.

En anden og hurtigere metode til at få sin computer til at gå ned:

perl -e 'fork() while true'

LAD VÆRE MED AT KØRE DEN med mindre du vil have din computer til at gå
ned med et brag.

M.


Kent Friis (08-03-2004)
Kommentar
Fra : Kent Friis


Dato : 08-03-04 19:37

Den Mon, 08 Mar 2004 19:04:07 +0100 skrev Michael Zedeler:
>Adam Sjøgren wrote:
>
>> On Fri, 5 Mar 2004 19:32:10 +0100, Michael wrote:
>>
>>>Har et lille script /root/script.sh:
>> [klip]
>>
>> Dvs. du har et script, som kalder et script, som kalder et script, som
>> kalder et script etc. etc. etc. - men ingen af dem afsluttes
>> nogensinde!
>>
>> /root/script.sh
>> +- /root/script.sh
>> +- /root/script.sh
>> etc.
>> etc.
>> etc.
>> etc
>>
>> Det er ikke så holdbart i længden.
>
>Advarsel: fjollet og potentielt farligt.
>
>En anden og hurtigere metode til at få sin computer til at gå ned:
>
>perl -e 'fork() while true'
>
>LAD VÆRE MED AT KØRE DEN med mindre du vil have din computer til at gå
>ned med et brag.

Det brag var sg* mindre end sidst jeg tabte en fjer ned over tærene.

X virkede godt nok død, og det tog et halvt minuts tid at logge ind
fra en anden terminal, men da jeg ikke gad vente længere (og maskinen
var holdt op med at swappe, så der så ikke ud til at ske det helt
store), var det blot at trykke CTRL-C, og vente 10 sekunder på at
samtlige processer stoppede.

Maskinen kører stadig uden problemer.

Linux gandalf 2.4.25 #2 Thu Feb 19 18:58:16 CET 2004 i686 unknown

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Jesper Louis Anderse~ (08-03-2004)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 08-03-04 21:49

In article <sE23c.106905$jf4.6395592@news000.worldonline.dk>,
Michael Zedeler wrote:

> En anden og hurtigere metode til at få sin computer til at gå ned:
>
> perl -e 'fork() while true'

OVERKILL:

:(){ :|:&};:

Og det faar ikke min computer til at gaa ned overhovedet.

annah$ ulimit -a
....
processes 160

Tag den!

--
j.

Peter Jensen (05-03-2004)
Kommentar
Fra : Peter Jensen


Dato : 05-03-04 21:11

Michael wrote:

> Har et lille script
>
> /root/script.sh:
>
> #!/bin/sh
> /usr/bin/php /home/scripts/doit.php
> sleep 10;
> /root/scripts.sh

Eeep! Dit script afslutter aldrig, så en ny kopi af kommandofortolkeren
(/bin/sh) bliver spawnet hver gang der køres en omgang!

> Jeg starter 2 forskellige der er næsten ens. Det mærkelige er at
> scriptene dør efter en periode på omkring 8-12 timer.
>
> Hvad kan det skyldes?

Hvis løkken er tæt nok er det nok fordi systemet løber tør for
hukommelse, hvorefter VM systemet slår scriptet og dets mange afkom
ihjel. Det er i hvert fald det der sker når jeg kører en accelereret
udgave af dit script på min Linux.

> Er der nogen bedre alternativer at gøre det på? Istedet for at løre
> mit PHP script i en løkke, ville jeg gerne genstarte det for at undgå
> memory leaks m.m.

Du vil undgå en lille memory leak ved at lave en gigantisk memory leak.
Smukt Havde du overvejet at holde øje med hukommelsesforbruget
undervejs?

Hvis du kunne fortælle mere om hvilket operativsystem du bruger, så
ville det være en stor hjælp. Det kunne jo f.eks. også være at din *nix
ikke løber tør for hukommelse når sådan en "løkke" køres, og så skal
problemet findes andetsteds. Jeg tror dog at den korrekte løsning er at
bruge en while løkke i stedet. F.eks.:

while true
do
# Something
done

--
PeKaJe

Early to rise, early to bed, makes a man healthy, wealthy and dead.
      -- Terry Pratchett, "The Light Fantastic"

Michael (05-03-2004)
Kommentar
Fra : Michael


Dato : 05-03-04 21:27

"Peter Jensen" <usenet@pekajemaps.homeip.net> skrev i en meddelelse
news:4048dede$0$29315$edfadb0f@dread15.news.tele.dk...
> Du vil undgå en lille memory leak ved at lave en gigantisk memory leak.
> Smukt Havde du overvejet at holde øje med hukommelsesforbruget
> undervejs?

heh... Jeg lærer jo hele tiden må jeg så konstatere :)

OS: SuSE9

Jeg prøver jeres forslag med do, while m.m.

Takker

--
Mvh

>
> Hvis du kunne fortælle mere om hvilket operativsystem du bruger, så
> ville det være en stor hjælp. Det kunne jo f.eks. også være at din *nix
> ikke løber tør for hukommelse når sådan en "løkke" køres, og så skal
> problemet findes andetsteds. Jeg tror dog at den korrekte løsning er at
> bruge en while løkke i stedet. F.eks.:
>
> while true
> do
> # Something
> done
>
> --
> PeKaJe
>
> Early to rise, early to bed, makes a man healthy, wealthy and dead.
> -- Terry Pratchett, "The Light Fantastic"



Peter Jensen (05-03-2004)
Kommentar
Fra : Peter Jensen


Dato : 05-03-04 23:51

Michael wrote:

>> Du vil undgå en lille memory leak ved at lave en gigantisk memory
>> leak. Smukt Havde du overvejet at holde øje med
>> hukommelsesforbruget undervejs?
>
> heh... Jeg lærer jo hele tiden må jeg så konstatere :)

Ja, det ville da være kedeligt ellers

> OS: SuSE9

OK, vi snakker altså Linux. I denne gruppe har jeg før kommet galt af
sted med at give Linux-specifikke råd.

Hvis du ellers vil holde øje med hukommelsesforbruget generelt, så brug
'free' (husk at buffere og cache egentlig er fri RAM). Du kan evt.
kombinere den med 'watch' for at få løbende opdateringer. Hvis du skal
vide hvad en enkelt process bruger af hukommelse, så kan du kigge i
/proc/<pid>/status (eller /proc/<pid>/stat for flere detaljer).

> Jeg prøver jeres forslag med do, while m.m.

Held og lykke med det fremover. Hvis du virkelig ønsker at lære god
scripting, så er der en masse materiale på
http://www.tldp.org/LDP/abs/html/index.html

> Takker

Det var så lidt ...

--
PeKaJe

The heart is wiser than the intellect.

Klaus Alexander Seis~ (06-03-2004)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 06-03-04 11:09

Peter Jensen skrev:

>> #!/bin/sh
>> /usr/bin/php /home/scripts/doit.php
>> sleep 10;
>> /root/scripts.sh
>
> Eeep! Dit script afslutter aldrig, så en ny kopi af kommando-
> fortolkeren (/bin/sh) bliver spawnet hver gang der køres en omgang!

Det problem kan evt. løses ved at lade sidste linje lyde:

#v+
exec /root/scripts.sh
#v-

Altså med exec i stedet for bare at kalde scriptet.

--
Klaus Alexander Seistrup, Copenhagen, Denmark.
http://www.seistrup.dk/ · http://www.pnx.dk/

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste