cron job elke n minuten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 03-06 06:47
Ik heb een Youless gekocht om mijn energieverbruik mee te loggen. Dat ding houdt voor een uur data in detail bij. Ik heb gezien dat als ik mijn job om hem uit te lezen elk uur laat draaien, ik soms één datapunt mis. Ik zou hem dus graag ietsje vaker willen laten pollen, bijvoorbeeld elke 57 minuten. Ik zie alleen niet hoe ik dat kan doen. Als ik het goed begrijp werkt cron zo dat als ik dit zo doen:
code:
1
*/57 * * * * mytask

hij op de 57e minuut van het uur de task runt. Dat is niet de bedoeling, ik wil dat de task runt op 0:57, 1:54, 2:51, etc.

Is er truc om wel met een dergelijk interval een taak te starten?

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Is iets als onderstaande geschikt? Ik weet dat het niet exact is wat je vraagt, maar denk niet dat je een soort 'rolling' crontab hebt.

code:
1
14,24,36,43,51  *   *   *   *   mytask


edit:
Eventueel iets als:

code:
1
0 * * * * * sleep $[RANDOM\%59]m ; mytask


Waar je dus sleep <random 0-59> minuten doet en dan pas je mytask uitvoert.

[ Voor 69% gewijzigd door spone op 25-06-2014 20:09 ]

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 03-06 06:47
Nou, het lijkt me van niet. Ik kan ook wel twee keer per uur starten, maar dan krijg ik veel dubbele data in mijn database. Omdat dit continue loopt om data op te halen, wil ik voorkomen dat ik teveel onzin in de database verzamel. Hij verzamelt al genoeg data... Vandaar de vraag om "elke n minuten" te starten, in plaats van "op minuut a en b".

Die tweede optie heeft de kans dat de periode tussen twee executies juist langer dan een uur is. Dat wil ik dus juist zien te voorkomen.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • Bastien
  • Registratie: Augustus 2001
  • Niet online
code:
1
*/5 * * * * [ $(( $(date +%s) / 60 % 55 )) -eq 0 ] && hierwatuittevoeren


Zoiets dacht ik, ooit zelf in een ver grijs verleden gebruikt. Zo wordt elke 5 minuten gekeken of de unix tijd 55 minuten is opgeschoven (t.o.v. 1-1-1970 00:00.00), zo ja dan gaat ie het commando uitvoeren. Maar geen garantie. :P

Zolang er mensen zijn zal de wereld nooit duurzaam worden.
Zijn er wel genoeg kliffen op de wereld waar 8 miljard mensen zich als lemmingen vanaf kunnen storten?


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 03-06 06:47
Kijk, zoiets zou zomaar kunnen gaan werken :) Ga ik proberen! Dank.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

Je kan 't ook in het script verwerken door een bestand aan te maken, bij de run kijken wat z'n mtime is (wijzigingstijd) en als die x minuten afwijkt van de huidige tijd de boel uitvoert, bestand met touch een nieuwe mtime geeft en dan weer laten wachten tot de volgende run.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 13:18

Kees

Serveradmin / BOFH / DoC
ATS schreef op woensdag 25 juni 2014 @ 20:19:
Nou, het lijkt me van niet. Ik kan ook wel twee keer per uur starten, maar dan krijg ik veel dubbele data in mijn database. Omdat dit continue loopt om data op te halen, wil ik voorkomen dat ik teveel onzin in de database verzamel. Hij verzamelt al genoeg data... Vandaar de vraag om "elke n minuten" te starten, in plaats van "op minuut a en b".

Die tweede optie heeft de kans dat de periode tussen twee executies juist langer dan een uur is. Dat wil ik dus juist zien te voorkomen.
En als je elke 57 minuten loopt dan heb je niet de kans dat je dubbele data krijgt en mischien zelfs een uur mist?

Wat voor data krijg je er precies uit?

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 05-06 17:59

CAPSLOCK2000

zie teletekst pagina 888

Volgens mij pak je het verkeerd aan om de reden die Kees hierboven aangeeft.

De beste oplossing is natuurlijk uitzoeken waarom je data mist.
Een alternatief is bij houden wanneer je voor het laatst data hebt ontvangen. Als dat meer dan een uur geleden is ga je proberen om te updaten. Dat blijf je regelmatig, bv iedere minuut, proberen tot het gelukt is.

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


Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 04-10-2024
Bastien schreef op woensdag 25 juni 2014 @ 20:20:
code:
1
*/5 * * * * [ $(( $(date +%s) / 60 % 55 )) -eq 0 ] && hierwatuittevoeren
Een slimme oplossing, maar pas op: Deze constructie maakt gebruik van bash-specifieke interpolatie $(( )) en dit werkt niet als je default cron-shell (/bin/sh) niet bash-compatible is.
warning: commands will be executed using /bin/sh
The Debian Almquist Shell (dash) is a POSIX-compliant shell derived from ash.

Since it executes scripts faster than bash, and has fewer library dependencies (making it more robust against software or hardware failures), it is used as the default system shell on Debian systems.
Homepage: http://gondor.apana.org.au/~herbert/dash/
Er zijn nogal wat makers van scripts die er ten onrechte van uitgaan dat bash de default shell /bin/sh is.
Pagina: 1