Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste,

Ik heb een heel apart probleem en ik hoop dat jullie me hiermee kunnen helpen.

Ik heb om een CentOS server een 8 tal cronjobs staan die allemaal op een bapaalde tijd in de nacht draaien. (voor het versturen van mailingen vanuit een systeem van verschillende klant)

Maar nu is het zo dat deze jobs enige tijd duren om te draaien. (afhankelijk van het aantal mails dat ze moeten versturen)
maar zodra ze op hun vastgestelde tijd laad draaien dan lopen de aangeroepen scripts door elkaar heen en worden sommige mails 5 of 6 keer verstuurd naar dezelfde persoon.

De scripts zelf hebben totaal geen verbinding met elkaar elk script kijkt in de database van het programma van een klant en kijk daarin in zijn que naar de te verzenden mails.
Als deze erin staan worden deze verstuurd.

Alle programma's hebben losse databases en qua folders staan ze helemaal los allemaal onder hun eigen account.

Als ik er 1tje los draai door de URL binnen het pakket aan te roepen gaat alles prima en draait het zonder problemen.
Maar zodra ik er 2 tegelijk doe komen de mails al dubbel binnen of lijkt het dat de scripts dubbel worden uitgevoerd of de loops dubbel lopen terwijl ze daar als ze solo draaien geen last van hebben.

Nou draait CentOS elke cronjob los dus kan me niet helemaal voorstellen dat het daarin zit maar het lijkt er wel op.

Wat heb ik al gedaan om dit probleem te vinden:
- database nagekeken ( dubbelde mails in de que, dubbel in mail log, of alles los staat)
- scripts nagekeken of ze echt los staan of op een bepaalde manier toch nog verbinding hebben met elkaar.
- Server nagekeken of ze misschien toch 2 keer draaien als de draai tijden elkaar overlappen (als de volgende begint als de eerste of die daarvoor nog niet klaar is)

Heeft iemand van jullie nog ideeën of suggesties wat of waar ik dit moet zoeken ?

Alvast bedankt!
Greets,

Marco.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Blijkbaar vissen de scripts toch uit dezelfde vijver (database, bestanden of queue) voor hun taken. Wat je kan doen is de jobs achter elkaar plaatsen in een script (of in de cronjob) waardoor deze sequentieel draaien. De tweede start dan pas als de eerste klaar is.
Anderszins kan het nog zijn dat, doordat de jobs tegelijk draaien, deze de mails niet af kunnen leveren (althans, dat 'denkt' het script) waardoor deze het nog een keer probeert).

Je geeft niet veel inhoudelijke info over wat voor programma we het hier hebben, dus daar kan ik ook niet op reageren.

Check ook de logging eens!

[ Voor 21% gewijzigd door Room42 op 04-06-2016 01:07 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 13:07
Doe je in de queue tabel in je database ook een veldje bijhouden of een item gereserveerd is door een script? Anders kan het dat meerdere cron processen hetzelfde record gaan staan verwerken.

Ik zou aanraden om voor een queue geen gebruik te maken van de database, maar van een service die daar echt voor gebouwd is. Bijvoorbeeld beanstalkd

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou in eerste instantie kijken of je inderdaad geen overlap hebt. Probleem lokaliseren moet je sowieso doen. Als ze doorelkaar lopen kun je eventueel flock gebruiken als fix: http://www.elevatedcode.c.../flock-for-cron-jobs.html

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
Gebruik je environment variabelen om bijv. je settings in te stoppen en zo ja, zijn dat verschillende settings per klant?

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ondanks dat cron-jobs soms wel geavanceerd programmeren is, horen topics hierover in Non-Windows Operating Systems.

Klein schopje die kant op.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 11-09 21:28

CAPSLOCK2000

zie teletekst pagina 888

Draait dat script nog onder een bepaalde gebruiker en is dat hetzelfde onder cron?

Als de scripts door elkaar heen lopen, is dat dan omdat cron op de verkeerde tijd een job start of omdat de vorige job gewoon nog niet klaar is. Het eerste kan ik me eerlijk gezegd maar moeilijk voorstellen, dat zou een serieuze bug zijn.
Als ik er 1tje los draai door de URL binnen het pakket aan te roepen gaat alles prima en draait het zonder problemen.
Maar zodra ik er 2 tegelijk doe komen de mails al dubbel binnen of lijkt het dat de scripts dubbel worden uitgevoerd of de loops dubbel lopen terwijl ze daar als ze solo draaien geen last van hebben.
Als ik dat zo hoor dan is er iets heel erg mis met je scriptje. Ik denk dat cron er helemaal niks mee te maken heeft en dat je beter de bugs in het script kan gaan zoeken.

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 11-09 22:47

Hero of Time

Moderator LNX

There is only one Legend

Het zou ook enorm helpen als je wat code van de scripts kan posten. Als we niet weten wat er uitgevoerd wordt, kunnen we je moeilijk helpen met debuggen.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • dakathefox
  • Registratie: Januari 2012
  • Laatst online: 12-08 21:35
Recentelijk heb ik dit probleem ook gehad. Het had simpelweg te maken met een overbelasting van de server. Elke cronjob is verantwoordelijk voor het opstarten van een taak en die taak zelf zal de nodige resources in beslag nemen. In jouw geval zal dat betekenen: contact ophalen, e-mail opbouwen, e-mail versturen. Ondertussen wordt je CPU wellicht zwaar belast, maar met name je uitgaande mailserver kan behoorlijk vertragend werken. In de logs moet dit terug te vinden zijn.

Start je het tweede proces, dan gaat alles hierdoor mogelijk in de war. Het zou niet moeten mogen dat klant A de e-mail krijgt van klant B, maar het zou wel kunnen dat klant A dezelfde e-mail meermaals krijgt. De oplossing: simpelweg je crons beter inplannen en je processen monitoren.

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 15:54
Houd er rekening mee dat als je wget in cron gebruikt om je script te laten draaien dat deze na een timeout een retry zal doen. Hetzelfde script wordt dan gewoon een aantal keren opgestart en als je script niet atomair is geprogrammeerd stuur je dan al snel dezelfde mailtjes meerdere keren.
Pagina: 1