Toon posts:

[linux] crontab voorkom meerdere instantie cronjob?

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik heb een probleem met een cronjob aangemaakt met crontab, de cronjob voert om de minuut een php script uit dat zwaar is. Dus het komt soms voor dat het script in 3 of 4 verschillende crond instantie's aangeroepen wordt omdat het script langer dan 1 minuut soms moet draiien.

Is het mogelijk een soort check in te bouwen dat het script maar 1 keer uitgevoerd mag worden.

ik kan het niet beter uitleggen :? ben geen linux guru dus aub in naab taal als er een oplossing is.

Gr

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 03-02 16:28

zomertje

Barisax knorretje

Waarom doe je het dan om de minuut? Dan heeft het toch geen nut? (als het script nog draait na de vorige aanroep)

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


Verwijderd

Topicstarter
Het script moet om de minuut draaien het krijgt om de minuut nieuwe data soms veel soms weinig.. Maar hij moet het iig elke minuut verwerken.

  • MrBarBarian
  • Registratie: Oktober 2003
  • Laatst online: 07-03-2023
Dat laat je het script een check op zichzelf uitvooeren.. als het al een keer draait direct exit, zonder inhoudelijk wat te doen?

iRacing Profiel


Verwijderd

bij mijn weten is dit niet via cron te regelen, dus moet je dat in het scriptje zetten.

je kunt het script bijvoorbeeld als het gaat draaien, een bestandje neer laten zetten ergens, en controleren of dat bestandje er staat voordat het script begint, bijv.

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

en het bestandje natuurlijk laten verwijderen als het script klaar is!

Verwijderd

Topicstarter
tja nu je het zegt |:( keep it simple stupid.

Slimme oplossing ga ik gelijk toepassen.

bedankt. _/-\o_


---- TOPIC CLOSED ----

  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

Als het script zo vaak moet lopen, is het dan niet beter om het gewoon vanaf het booten op te starten, en het altijd te laten draaien ?
Het loopt dan gewoon steeds door de acties heen, en eventueel zet je een sleep aan het einde van de loop.

The number of things that Arthur couldn't believe he was seeing was fairly large


  • Sendy
  • Registratie: September 2001
  • Niet online
Taxtarus, je voorbeeld is een beetje kaal

code:
1
2
3
4
5
6
7
8
9
if [ -f /tmp/running ] ; then
  exit 1
fi

touch /tmp/running

[...]

rm /tmp/running


Omdat het tijd kost om van de if bij de touch te belanden heb je --in theorie-- een buglet gemaakt. Hier is dat waarschijnlijk geen probleem omdat de scripts nooit op precies dezelfde tijd gestart worden (cron start ze namelijk om de minuut).

Ik zou het locking mechanisme gebruikt (flock). Vervang de if hiermee en de kernel zorgt dat de twee processen niet door elkaar kunnen gaan lopen.

edit:

Maar goed, de simpele versie werkt ook in dit geval.

[ Voor 7% gewijzigd door Sendy op 21-04-2006 11:23 ]


  • Seth4Chaos
  • Registratie: Maart 2001
  • Niet online

Seth4Chaos

that's me...

als je het met een trap doet wordt de 'pid file' ook verwijderd als het proces gekilled wordt (niet met -9 uiteraard) of op een andere manier onderbroken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh

PID="/var/run/`basename $0`.pid"

## Check if running
[ -f ${PID} ] && {
  exit 0
}

## Remove PID on exit
trap 'rm -f ${PID}' TERM INT EXIT

## Save PID
echo $$ > ${PID}

Mistakes are proof that you are trying...

Pagina: 1