v5.dk logo
Kom ind og besøg vores Discord Chat-community
Bliv medlem her eller læs mere om Discord her
1 stor kaffe i byen eller 1 hel md.
som Premium-medlem, valget er dit! :-)

Mere info Køb nu

Premium på v5.dk
v5.dk logo  v5.dk e-learning
Log på med Facebook
  • Log ind på v5.dk
  • Opret bruger
  • Log ind
  • v5.dk Premium
  • v5.dk Premium
  • Hvad siger vores kunder?
  • E-læring for begyndere
  • icon for WordPress 4 e-learning WordPress 4
  • icon for Office 365 e-learning Office 365
  • icon for Microsoft Word e-learning Microsoft Word
  • Bloggen for alle
  • E-læring for nørder
  • icon for PHP-programmering e-learning PHP-programmering
  • icon for iOS Programmering e-learning iOS Programmering
  • icon for Linux Server e-learning Linux Server
  • Bloggen for nørder
  • Arkiverede videoer
  • Fællesskab
  • Forum
  • Idéer og ønsker
  • Markedspladsen
  • v5.dk Premium
  • Gratis webhotel
  • Cloud-servere
  • Om v5.dk
  • Søg på v5.dk
  • Om v5.dk ApS
    • Om virksomheden
    • RSS-feeds og tjenester
    • Driftsmeddelelser
    • Presse-kit
    • Ledige jobs
    • Social Netværk
      • Facebook
      • Twitter
      • Instagram
    • Alt det andet
      • Forretningsbetingelser
      • Ophavsret og Copyright
  • Kontakt kundeservice
  • FAQ og Hjælp
    • Premium og abb.
    • Videoer og Afspiller
    • Forum og Points
    • Cloud-servers
  • Partner/Virksomhed
  • Partner-kanal
v5.dk logo mobile
  • Menu
  • Opret bruger

Sådan forhindre du at Cronjobs overlapper hinanden i Linux
Alle der arbejder med Cronjobs i Linux kender til problemet, jobs der potentielt kan overlappe hinanden. I dette blogindlæg beskriver jeg hvordan du kan forhindre at cronjobs overlapper hinanden.

  1. v5.dk
  2. Blog
  3. For nørder
  4. Linux server
  5. Sådan forhindre du at Cronjobs overlapper hinanden i Linux
Profil-billede
GÆST   Bliv gratis medlem: Opret bruger eller log på via Facebook
Tweet
Skrevet for 7 år siden
  • #Linux
  • #Cronjobs

Cronjobs og Flock

Sådan forhindre du Cronjobs i at overlappe hinanden

Har du en Linux-server? og afvikler du løbende cronjobs fra denne Linux-server? Hvis du kan svare Ja til de to overstående spørgsmål, er jeg sikker på du også kender til problemet med at forhindre cronjobs i at overlappe hinande? Jeg har hvertfald ofte fået netop dette spørgsmål fra brugere her på v5.dk.

Problemet kort fortalt
Du har planlagte opgaver (cronjobs) på din server, måske et job der kører hvert 10. minut, men en eller anden dag, tager jobbet måske længere tid at udføre end forventet, dette betyder i sidste ende, at dine jobs begynder at overlappe hinanden og køre på samme tid. Hvis dine cronjobs, handler på de samme data fra eksempelvis en MySQL-database, kan det betyde data-korruption; måske bliver betalinger gennemført flere gange? måske bliver data dobbelt-bogført i dit regnskabssystem, måske bliver der udsendt flere mails end nødvendigt - der kan være mange konsekvenser af overlappende cronjobs.

Løsningen på overstående problem er heldigivs simpel!
Jeg har set rigtig mange eksempler på at løse dette problem. Oftest har jeg set en MySQL-database med et KørerMitScript-felt sat til true eller false, og på den måde styrer om et job kører eller ej, der er mange grunde til hvorfor dette bestemt ikke er en smart løsning, men der er ingen grund til at genopfinde den dybe tallerken, når den allerede findes, og samtidig er gratis Humørikon / Emoteicon / Smiley

Si' hej til Flock

Flock er et meget interessant værktøj til styring at låste filer. Disse låste filer bruges til at afgøre, om er script eller program allerede kører (kan sammenlignes med en PID-fil, der indeholder et Proces ID på det kørende script). Hvis låsen eksisterer, vil jobbet ikke starte. Hvis låsen ikke eksisterer, er det sikkert at starte cronjobbet op.

Lad os tage et simpelt eksempel her, hvor der hvert minut eksekveres et PHP-script:

$ crontab -l
* * * * * /usr/bin/php /var/cron/php/v5-book-economic.php

I overstående eksempel køres v5.dks faktura-motor hvert minut, men nogle gange er e-conomics lidt længere om at svare, derfor er det vigtigt at vores script ikke overlapper, men det er heldigvis super nemt at løse vha. flock, her er et eksempel:

$ crontab -l
* * * * * /usr/bin/flock -w 0 /tmp/v5booke.lock /usr/bin/php /var/cron/php/v5-book-economic.php

Så ved blot at indsætte  /usr/bin/flock -w 0 /tmp/v5booke.lock foran vores normale cronjob, har vi nu sikret at jobbet ikke kan overlappe sig selv.

Installation af Flock

Overstående eksempel kræver naturligvis at Flock er installeret på din Linux-server. Hvis du kører Ubuntu- eller Debian Linux skriver du blot apt-get install flock for at installerer flock, på CentOS er kommandoen yum install flock.

Tjek om en process er låst

Når overstående eksempel køres, låses filen /tmp/v5booke.lock så længe vores PHP-script arbejder. For at se om en process er aktiv og dermed om filen er låst, kan kommandoen fuser bruges, som viser hvilken bruger og hvilken PID der har låst lock-filen.

$ fuser -v /tmp/v5booke.lock
USER PID ACCESS COMMAND
cron.lock: crnjbs 7836 f.... flock
crnjbs 7837 f.... php

Hvis overstående fuser-kommando ikke returnerer nogle users, er cronjobs frit, og bliver eksekveret igen ved næste cron-kørsel.

Konklussion

Jeg håber dette har givet et godt lille eksempel på hvordan man nemt kan bruge flock til at forhindre cronjobs i at overlappe hinanden.

Har du har et spørgsmål er du mere end velkommen til at oprette det i vores forum. Kommentarer, feedback og gode idéer kan skrive i kommentar-feltet under her.

God fornøjelse med flock Humørikon / Emoteicon / Smiley

 

Gratis bruger på v5.dk

  • Kan opgraderes til Premium!
  • Adgang til basis-funktioner
  • Adgang til forum og svar
  • Adgang til support-systemet
  • Adgang til vores blog
  • Adgang til gratis artikler
  • Adgang til markedspladsen

Det tager mindre end 10 sekunder

Bliv gratis medlem på v5.dk

Opret ny gratis bruger

Nye forum-indlæg på v5.dk

Emne Svar Løst
Avatar for thomasmoellerFejlkode i form af bip-lyde ved opstart af gammel stationær PC
Offtopic / Andet | @thomasmoeller
9
Avatar for mikeGoogle One
Offtopic / Andet | @mike
1
Avatar for mikeG Suite eller Office 365
Offtopic / Andet | @mike
3
Avatar for mikeOpsigelse af lejlighed skabelon
Offtopic / Andet | @mike
1
Avatar for kimsaxtorphPWA udvikling
Offtopic / Andet | @kimsaxtorph
3
Avatar for jesperpetersenlink bliver lavet om når jeg tilføjer dem via TinyMCE?
Offtopic / Andet | @jesperpetersen
2
Avatar for linda1701stSådan får du gratis ringetoner til iPhone
Offtopic / Andet | @linda1701st
4
Avatar for klauskalmeyerRaspberry Pi...........
Offtopic / Andet | @klauskalmeyer
2
Spørg i vores forum

Stil dit spørgsmål i vores forum og få hjælp fra andre v5.dk brugere eller del din viden og gør os alle klogere!

Nyt spørgsmål Gå til forum
v5.dk

Du kan også følge os på Twitter og Instagram

Bygget med af v5.dk
© Copyright 2006-2023 • Forretningsbetingelser • Copyright • Persondata- og Cookiepolitik
v5.dk ApS - Åbogade 15 - 8200 Aarhus N - CVR: 36902833
v5.dk logo
Hej, vi hedder v5.dk og vi laver e-learning på dansk

v5.dk er sat i verden for at gøre teknologi tilgængeligt og anvendeligt for både professionelle og almindelige brugere på alle niveauer.

93 200 555
  Skriv til os
v5.dk bruger cookies til at huske dine indstillinger, livechat samt til statistik
 

Alle vores priser er inkl. moms Sikker SSL-beskyttet forbindelse

Dankort og Visa-Dankort  Visa  Mastercard og Mastercard Junior  Maestro

  • Produkter
  • v5.dk Premium
  • Cloud-servers
  • v5.dk
  • Om v5.dk
  • Kunderne siger
  • Kontakt os
  • Presse
  • Stay updated
  • RSS & tjenester
  • Søg på v5.dk
  • Sitemap