/ 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
Simpelt cron spørgsmål
Fra : Henrik Lynggaard Han~


Dato : 12-11-06 02:03

Hejsa

Et simpelt spørgsmål som jeg kom til at tænke på mens jeg lavade et cron
script

Hvad sker der hvis cron scriptet tager længere tid at køre end der er
pause mellem dens aktiveringer f.eks. et cron script der kører hver time
tager 1.5 time om at køre.

Er cron smart nok til ikke at starte en ny kørsel hvis den gamle stadig
kører, eller starter den blindt en ny ?

mvh
henrik


 
 
Kent Friis (12-11-2006)
Kommentar
Fra : Kent Friis


Dato : 12-11-06 02:07

Den Sun, 12 Nov 2006 02:02:50 +0100 skrev Henrik Lynggaard Hansen:
> Hejsa
>
> Et simpelt spørgsmål som jeg kom til at tænke på mens jeg lavade et cron
> script
>
> Hvad sker der hvis cron scriptet tager længere tid at køre end der er
> pause mellem dens aktiveringer f.eks. et cron script der kører hver time
> tager 1.5 time om at køre.
>
> Er cron smart nok til ikke at starte en ny kørsel hvis den gamle stadig
> kører, eller starter den blindt en ny ?

Det kommer an på hvilken cron du bruger. Jeg mindes at være stødt
på en hvor manualen nævnte at den IKKE ville blive startet igen, men
de fleste versioner gør mig bekendt bare som de får besked på uden
at forsøge at være klogere end administratoren.

Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).

Michael Rasmussen (12-11-2006)
Kommentar
Fra : Michael Rasmussen


Dato : 12-11-06 03:46

On Sun, 12 Nov 2006 01:06:51 +0000, Kent Friis wrote:

> Det kommer an på hvilken cron du bruger. Jeg mindes at være stødt
> på en hvor manualen nævnte at den IKKE ville blive startet igen, men
> de fleste versioner gør mig bekendt bare som de får besked på uden
> at forsøge at være klogere end administratoren.
>
Det sikreste, mig bekendt, hvis man har en sådan situation, er at oprette
en temp-fil, når skriftet starter, og fjerne den igen når scriptet er
færdigt. Hver gang scriptet starter, udføres følgende test:

if [ -f /tmp/temp-fil ]; then
exit 1
fi

touch /tmp/temp-fil

.......

rm -f /tmp/temp-fil
exit 0

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917

Morten Guldager (12-11-2006)
Kommentar
Fra : Morten Guldager


Dato : 12-11-06 07:50

2006-11-12 Michael Rasmussen wrote
> On Sun, 12 Nov 2006 01:06:51 +0000, Kent Friis wrote:
>
>> Det kommer an på hvilken cron du bruger. Jeg mindes at være stødt
>> på en hvor manualen nævnte at den IKKE ville blive startet igen, men
>> de fleste versioner gør mig bekendt bare som de får besked på uden
>> at forsøge at være klogere end administratoren.
>>
> Det sikreste, mig bekendt, hvis man har en sådan situation, er at oprette
> en temp-fil, når skriftet starter, og fjerne den igen når scriptet er
> færdigt. Hver gang scriptet starter, udføres følgende test:
>
> if [ -f /tmp/temp-fil ]; then
> exit 1
> fi
>
> touch /tmp/temp-fil
>
> ......
>
> rm -f /tmp/temp-fil
> exit 0

Og den metoder forudsætter så at instans-1 når forbi test og touch inden
instans-2 bliver startet.

Den smukke løsning er at sikre at test og touch sker i en atomisk
operation.



/Morten

Henrik Lynggaard Han~ (12-11-2006)
Kommentar
Fra : Henrik Lynggaard Han~


Dato : 12-11-06 11:50

Morten Guldager wrote:

> Og den metoder forudsætter så at instans-1 når forbi test og touch inden
> instans-2 bliver startet.
>
> Den smukke løsning er at sikre at test og touch sker i en atomisk
> operation.

Men vel også lidt overkill når hvis der er en time mellem jobbene bliver
kaldt.(og det står først i scriptet) ?

mvh
henrik


Jørgen Heesche (12-11-2006)
Kommentar
Fra : Jørgen Heesche


Dato : 12-11-06 12:03

Morten Guldager wrote:
> 2006-11-12 Michael Rasmussen wrote
>> On Sun, 12 Nov 2006 01:06:51 +0000, Kent Friis wrote:
>>
>>> Det kommer an på hvilken cron du bruger. Jeg mindes at være stødt
>>> på en hvor manualen nævnte at den IKKE ville blive startet igen, men
>>> de fleste versioner gør mig bekendt bare som de får besked på uden
>>> at forsøge at være klogere end administratoren.
>>>
>> Det sikreste, mig bekendt, hvis man har en sådan situation, er at oprette
>> en temp-fil, når skriftet starter, og fjerne den igen når scriptet er
>> færdigt. Hver gang scriptet starter, udføres følgende test:
>>
>> if [ -f /tmp/temp-fil ]; then
>> exit 1
>> fi
>>
>> touch /tmp/temp-fil
>>
>> ......
>>
>> rm -f /tmp/temp-fil
>> exit 0
>
> Og den metoder forudsætter så at instans-1 når forbi test og touch inden
> instans-2 bliver startet.
>
> Den smukke løsning er at sikre at test og touch sker i en atomisk
> operation.
>
Metoden er sikker nok, det samme job lægges da ikke til start i cron med
så korte mellemrum, at der ved normal afvikling er fare for kollision.
Metoden er effektiv, hvis et job, f.eks. pga. fejlprogrammering, bliver
hængende for længe, måske i en uendelig løkke. I værste fald kan et job,
der bliver hængende i en uendelig løkke, blive startet så mange, at
serveren bliver kvalt.
Hvad mener du med atomisk operation?. Kan du angive en anden løsning
end den beskrevne?.

--
Med venlig hilsen

Jørgen Heesche
mailto:heesche@webspeed.dk
Registered Linux User #401007

Benny Amorsen (12-11-2006)
Kommentar
Fra : Benny Amorsen


Dato : 12-11-06 12:25

>>>>> "JH" == Jørgen Heesche <heesche@webspeed.dk> writes:

JH> Kan du angive en anden løsning end den beskrevne?.

touch test # Vi skal bruge en fil
if ln test lockfil ; then
echo Jubii, vi fik låsen
...
rm lockfil
else
echo Trist
fi


/Benny


Christian Joergensen (12-11-2006)
Kommentar
Fra : Christian Joergensen


Dato : 12-11-06 15:37

Benny Amorsen <benny+usenet@amorsen.dk> writes:

>>>>>> "JH" == Jørgen Heesche <heesche@webspeed.dk> writes:
>
> JH> Kan du angive en anden løsning end den beskrevne?.
>
> touch test # Vi skal bruge en fil
> if ln test lockfil ; then

Du kan ogsaa bare symlinke - evt. til $$, saa kan man ogsaa se
hvem der har laasen :)

--
Christian Joergensen | Linux, programming or web consultancy
http://www.razor.dk | Visit us at: http://www.gmta.info

Benny Amorsen (12-11-2006)
Kommentar
Fra : Benny Amorsen


Dato : 12-11-06 16:43

>>>>> "CJ" == Christian Joergensen <mail@razor.dk> writes:

CJ> Du kan ogsaa bare symlinke - evt. til $$, saa kan man ogsaa se
CJ> hvem der har laasen :)

Det er rigtigt. Jeg kan bare godt lide ln til en fil i samme katalog.
Den og så unlink er de eneste rigtigt "atomiske" filsystems-kommandoer
på traditionel Unix. I dette tilfælde vil symlinks virke, fordi man
aldrig opdaterer et symlink, men kun laver det eller sletter det.

Hvis nu man vænner sig til symlinks, og f.eks. har et symlink, der
altid skal pege på enten den nye eller den gamle version. Så bruger
man ln -sf, og bam, pludselig er der et øjeblik, hvor symlinket ikke
eksisterer. GNU ln laver nemlig en unlink først, i stedet for at lave
en midlertidigt symlink efterfulgt at en hard link eller en rename.


/Benny


Sune Vuorela (12-11-2006)
Kommentar
Fra : Sune Vuorela


Dato : 12-11-06 13:57

On 2006-11-12, Morten Guldager <Morten.Guldager@gmail.com> wrote:
> Den smukke løsning er at sikre at test og touch sker i en atomisk
> operation.

if ! mkdir $LOCKDIR
then
   echo "vi kører allerede"
   exit 0
fi

....



rmdir $LOCKDIR

Jesper Krogh (12-11-2006)
Kommentar
Fra : Jesper Krogh


Dato : 12-11-06 13:59

I dk.edb.system.unix, skrev Sune Vuorela:
> On 2006-11-12, Morten Guldager <Morten.Guldager@gmail.com> wrote:
> > Den smukke løsning er at sikre at test og touch sker i en atomisk
> > operation.
>
> if ! mkdir $LOCKDIR
> then
>    echo "vi kører allerede"
>    exit 0
> fi
>

Hvis hvis programmet bliver kill'ed inden det når til rmdir? Hvornår
starter det næste så?
>
> rmdir $LOCKDIR

Jesper
--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


Morten Guldager (12-11-2006)
Kommentar
Fra : Morten Guldager


Dato : 12-11-06 14:14

2006-11-12 Jesper Krogh wrote
> I dk.edb.system.unix, skrev Sune Vuorela:
>> On 2006-11-12, Morten Guldager <Morten.Guldager@gmail.com> wrote:
>> > Den smukke løsning er at sikre at test og touch sker i en atomisk
>> > operation.
>>
>> if ! mkdir $LOCKDIR
>> then
>>    echo "vi kører allerede"
>>    exit 0
>> fi
>>
>
> Hvis hvis programmet bliver kill'ed inden det når til rmdir? Hvornår
> starter det næste så?

Aldrig. ihvertfald ikke før sysadm har fjernet den hængende lås.

Men du har samme problem hvis et program går i stå uden at dø.


/Morten

Jesper Krogh (12-11-2006)
Kommentar
Fra : Jesper Krogh


Dato : 12-11-06 14:22

I dk.edb.system.unix, skrev Morten Guldager:
> 2006-11-12 Jesper Krogh wrote
> > I dk.edb.system.unix, skrev Sune Vuorela:
> >> On 2006-11-12, Morten Guldager <Morten.Guldager@gmail.com> wrote:
> >> > Den smukke løsning er at sikre at test og touch sker i en atomisk
> >> > operation.
> >> if ! mkdir $LOCKDIR
> >> then
> >>    echo "vi kører allerede"
> >>    exit 0
> >> fi
> >
> > Hvis hvis programmet bliver kill'ed inden det når til rmdir? Hvornår
> > starter det næste så?
>
> Aldrig. ihvertfald ikke før sysadm har fjernet den hængende lås.
> Men du har samme problem hvis et program går i stå uden at dø.

Spørgsmålet var en smule retorisk.. Sørg for at lockdir er i /tmp og
/tmp bliver ryddet ved bootup, eller håndter denne situation på en anden
og bedre måde.. (skriv processid til en fil og lad programmet checkke om
det program der påstår at have låsen rent faktisk også har den).

Jesper
--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


Klaus Alexander Seis~ (12-11-2006)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 12-11-06 15:03

Jesper Krogh skrev:

> Spørgsmålet var en smule retorisk.. Sørg for at lockdir er i
> /tmp og /tmp bliver ryddet ved bootup, eller håndter denne
> situation på en anden og bedre måde.

Man kan sætte en "trap" umiddelbart efter man har lavet kataloget:

#v+

   mkdir -p ${LOCKDIR} && \
    trap "rmdir ${LOCKDIR}" 0 1 2 3 15

#v-

Mvh,

--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/

Jesper Krogh (12-11-2006)
Kommentar
Fra : Jesper Krogh


Dato : 12-11-06 15:09

I dk.edb.system.unix, skrev Klaus Alexander Seistrup:
> Jesper Krogh skrev:
>
> > Spørgsmålet var en smule retorisk.. Sørg for at lockdir er i
> > /tmp og /tmp bliver ryddet ved bootup, eller håndter denne
> > situation på en anden og bedre måde.
>
> Man kan sætte en "trap" umiddelbart efter man har lavet kataloget:
>
> #v+
>
>    mkdir -p ${LOCKDIR} && \
>     trap "rmdir ${LOCKDIR}" 0 1 2 3 15
>
> #v-

Det er abosolut bedre, det fanger de mest typiske ting.. så er der kun
situationen hvor strømmen bliver taget tilbage.

Jesper
--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


andy (13-11-2006)
Kommentar
Fra : andy


Dato : 13-11-06 13:48

Jesper Krogh wrote:
> I dk.edb.system.unix, skrev Klaus Alexander Seistrup:
>> Jesper Krogh skrev:
>>
>>> Spørgsmålet var en smule retorisk.. Sørg for at lockdir er i
>>> /tmp og /tmp bliver ryddet ved bootup, eller håndter denne
>>> situation på en anden og bedre måde.
>> Man kan sætte en "trap" umiddelbart efter man har lavet kataloget:
>>
>> #v+
>>
>>    mkdir -p ${LOCKDIR} && \
>>     trap "rmdir ${LOCKDIR}" 0 1 2 3 15
>>
>> #v-
>
> Det er abosolut bedre, det fanger de mest typiske ting.. så er der kun
> situationen hvor strømmen bliver taget tilbage.
>
> Jesper
jeg har lige et tilægs spørgsmål, ang. cron.
hvordan gør jeg så et script starter hver halve tim kl 00 & 30 alle
timer året rundt.
er dette korekt?
00,30 * * * * komando


Jesper Krogh (12-11-2006)
Kommentar
Fra : Jesper Krogh


Dato : 12-11-06 15:39

I dk.edb.system.unix, skrev andy:
> jeg har lige et tilægs spørgsmål, ang. cron.
> hvordan gør jeg så et script starter hver halve tim kl 00 & 30 alle
> timer året rundt.
> er dette korekt?
> 00,30 * * * * komando

Ja.. kig selv efter flere eksempler i "man 5 crontab".

Jesper
--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


Jørgen Heesche (12-11-2006)
Kommentar
Fra : Jørgen Heesche


Dato : 12-11-06 22:55

Jesper Krogh wrote:
> I dk.edb.system.unix, skrev Morten Guldager:
>> 2006-11-12 Jesper Krogh wrote
>>> I dk.edb.system.unix, skrev Sune Vuorela:
>>>> On 2006-11-12, Morten Guldager <Morten.Guldager@gmail.com> wrote:
>>>>> Den smukke løsning er at sikre at test og touch sker i en atomisk
>>>>> operation.
>>>> if ! mkdir $LOCKDIR
>>>> then
>>>>    echo "vi kører allerede"
>>>>    exit 0
>>>> fi
>>> Hvis hvis programmet bliver kill'ed inden det når til rmdir? Hvornår
>>> starter det næste så?
>> Aldrig. ihvertfald ikke før sysadm har fjernet den hængende lås.
>> Men du har samme problem hvis et program går i stå uden at dø.
>
> Spørgsmålet var en smule retorisk.. Sørg for at lockdir er i /tmp og
> /tmp bliver ryddet ved bootup, eller håndter denne situation på en anden
> og bedre måde.. (skriv processid til en fil og lad programmet checkke om
> det program der påstår at have låsen rent faktisk også har den).
>
Hvorfor være i tvivl om hvilket program, der har sat en lockfil (eller
lockdir)?. Hvis et program giver lockfilen et unikt navn, kan der ikke
være tvivl om ejerskabet.

--
Med venlig hilsen

Jørgen Heesche
mailto:heesche@webspeed.dk
Registered Linux User #401007

Jesper Krogh (12-11-2006)
Kommentar
Fra : Jesper Krogh


Dato : 12-11-06 23:11

I dk.edb.system.unix, skrev Jørgen Heesche:
> > Spørgsmålet var en smule retorisk.. Sørg for at lockdir er i /tmp og
> > /tmp bliver ryddet ved bootup, eller håndter denne situation på en anden
> > og bedre måde.. (skriv processid til en fil og lad programmet checkke om
> > det program der påstår at have låsen rent faktisk også har den).
> >
> Hvorfor være i tvivl om hvilket program, der har sat en lockfil (eller
> lockdir)?. Hvis et program giver lockfilen et unikt navn, kan der ikke
> være tvivl om ejerskabet.

Jeg er heller ikke i tvivl om hvilket program det er.. men hvilken
instans af programmet det er.

Jesper
--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste