Voorkom overlappende cronjobs met run-one

kapotte wekker

Artikelgereedschap

  • Tip ons
  • Printen
  • Reacties (5)
Aanbevelen

Gepubliceerd: Donderdag 26 mei 2011
Auteur: Koen Vervloesem

Ubuntu 11.04 heeft twee nieuwe commando's die je kunnen helpen bij het automatiseren van taken: run-one en run-this-one. Deze commando's zorgen ervoor dat langdurige cronjobs zichzelf niet overlappen.

Ubuntu-ontwikkelaar Dustin Kirkland heeft voor Ubuntu 11.04 de commando's run-one en run-this-one geschreven, beide beschikbaar in het pakket run-one. Onder eerdere versies van Ubuntu is het pakket ook beschikbaar als je de PPA ppa:run-one/ppa installeert. Overigens zijn beide commando's eenvoudige shell-scripts, dus ook onder andere distributies kun je ze gebruiken.

Trage cronjobs

Run-one werd geboren uit een probleem dat Kirkland met trage cronjobs had: als een hourly cronjob zoals een synchronisatie met rsync langer dan een uur duurde (bijvoorbeeld omdat de netwerkverbinding traag was), dan had Kirkland op zijn systeem al vlug meerdere rsync-taken tegelijk draaien. Om dit tegen te gaan, moet je gewoon run-one voor je commando plaatsen in de cronjob, bijvoorbeeld:


*/60 * * * * run-one rsync -azP $HOME example.com:/srv/backup


Run-one berekent de md5sum hash-waarde van het commando, inclusief zijn argumenten, en probeert dan met het flock-commando een lock te krijgen op het bestand $HOME/.cache/$HASH. Als dat lukt, wordt het commando uitgevoerd en geeft run-one de lock pas vrij wanneer het commando voltooid is.

Als het niet lukt, dan betekent dit dat hetzelfde commando al draait, en dan stopt run-one gewoon met een exit-code die een fout aangeeft. Het resultaat is dat je er altijd zeker van bent dat dit commando nooit meer dan één keer tegelijk wordt uitgevoerd.

Breek processen af

Het commando run-this-one doet iets gelijksoortigs, maar dan voor andere situaties. Stel dat je vaak een ssh-tunnel start met hetzelfde commando, maar dat na een tijd de ssh-verbinding blijft hangen door netwerkproblemen, terwijl het proces nog blijft draaien. Dan moet je vaak het oude commando eerst killen voor je het nog eens opstart.

Het commando run-this-one doet dit al voor je als je het voor het commando zet dat je wilt uitvoeren. Run-this-one zoekt met pgrep naar nog draaiende versies van je commando en killt deze eerst, waarna het het commando uitvoert. Hierdoor ben je ervan verzekerd dat je laatste oproep van het commando wel degelijk uitgevoerd wordt.

De rubriek Tips & Tools biedt praktische informatie die IT-professionals in hun dagelijkse werk kunnen toepassen.

Nieuwsbrief

Ontvang dagelijks een overzicht van het laatste ICT-Nieuws in uw mailbox

Whitepapers

  • Maximaliseer het voordeel van SaaS

    Cloud-applicaties hebben grote invloed op het gebruik van de IT-architectuur en niet ieder project levert de verwachte voordelen op.

    Downloaden
  • Flexibele IT noodzaak voor bankenOnderzoeksrapport over de beperkte flexibiliteit van veel IT-systemen in de bancaire wereld. Lees meer!
  • Kostenbesparing voor long tail appsOplossing voor kostenkwesties in VDI. Technologie geschikt voor long tail apps.
» Meer whitepapers

Peiling

Loading Poll

Video: Review: HTC One X-smartphone met vijf...

Review: HTC One X-smartphone met vijf cores (video)