[Bash] Date / tijd diff berekenen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 22:10
Ik zit met een bash script probleem.
Ik heb er inmiddels behoorlijk wat over gezocht en gelezen, maar kom er maar niet uit.
Wellicht dat één van jullie mij verder op weg kan helpen.

Ik heb een backup lopen die een logfile genereerd met daarin wat data.
Of de backup wel of niet goed gelopen heeft (exit-code) en hoe groot de backup is.
Ook staat daarin een start en eindtijd.
Aangezien ik de job wil monitoren in Nagios wil ik weten of de backup gelopen heeft, maar ik wil ook weten hoe lang de job erover gedaan heeft.Het retourneren van de exit-code naar Nagios is geen probleem, maar het aantal secondes bepalen hoe lang de backup heeft geduurd krijg ik niet voor elkaar.
Ik wil dus de twee tijden van elkaar aftrekken. En vervolgens dat aantal secondes wil ik retourneren naar Nagios.
Ik kom er maar niet uit hoe ik deze tijden van elkaar af kan trekken.
Het formaat wat wordt weggeschreven is als volgt:
#starttijd
21-12-2012 23:00:00
#eindtijd
22-12-2012 00:34:33

Hoe moet ik deze twee tijden van elkaar aftrekken? Ik dacht slim te zijn en de data om te zetten naar secondes, en deze vervolgens van elkaar af te trekken, om zo tot bijvoorbeeld 5476 secondes te komen.
Maar zelfs dat krijg ik maar niet voor elkaar.

Wie kan mij op weghelpen?
Ik wil komen tot bijvoorbeeld deze variabele
aantal_secondes= ($eindtijd - $starttijd)

The best thing about UDP jokes is that I don't care if you get them or not.


Acties:
  • 0 Henk 'm!

  • FiscBiker
  • Registratie: April 2003
  • Laatst online: 21:44
De FreeBSD manpage van date geeft aan dat dat als volgt moet:
date -j -f "%d-%m-%Y %H:%M:%S" "21-12-2012 23:00:00" "+%s"


Linux date kan iets anders zijn, maar ik mag aannemen dat die het ook kan.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:18

Hero of Time

Moderator LNX

There is only one Legend

Wat ik op het werk voor een bepaalde taak had, was de UNIX time voor en na de job weergeven en deze dan van elkaar aftrekken om het aantal secondes te krijgen. Beetje wat hierboven staat, maar dan alleen met date +%s. Iets als dit:
code:
1
2
3
4
5
#!/bin/bash
begin=$(date +%s)
<hele backup gebeuren>
eind=$(date +%s)
runtime="$eind - $begin"

Zoiets. Even zelf de wiskunde toepassen in je script zodat het werkt.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 18:19

MartinMeijerink

Niet van deze wereld

hier:
starttijd="21-12-2012 23:00:00"
starttijdinseconden=$(date +%s --date="${starttijd:6:4}${starttijd:3:2}${starttijd:0:2} ${starttijd:11:8}")
eindtijd="22-12-2012 00:34:33"
eindtijdinseconden=$(date +%s --date="${eindtijd:6:4}${eindtijd:3:2}${eindtijd:0:2} ${eindtijd:11:8}")
aantal_secondes=$[eindtijdinseconden-starttijdinseconden]

toelichting volgt nog als het nodig is want ik moet nu ff weg... :)

Fiscbiker: Ik zie in de linuxversie van date niet zo gauw dat je ook bij de input het format kan opgeven...

Maar nu mijn toelichting, eigenlijk spreekt het voor zich al, maar ik ga dus met
date +%s --date="20121221 23:00:00"
bepalen hoeveel seconden het bepaalde tijdstip sinds 1970-01-01 00:00:00 UTC zijn verstreken, en hetzelfde doe ik ook met de eindtijd...

(Beter is het eigenlijk nog om al helemaal geen dd-mm-jjjj notatie te gebruiken, maar gewoon jjjj-mm-dd, dat werkt wat makkelijker)

[ Voor 37% gewijzigd door MartinMeijerink op 22-12-2012 20:12 . Reden: toelichting ]

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Waarom gebruik je niet de shell builtin 'time'?

Bash:
1
2
3
4
5
6
7
#! /bin/bash

function do_backup() {
 # implementatie hier
}

time do_backup

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 22:10
H!GHGuY schreef op maandag 24 december 2012 @ 08:20:
Waarom gebruik je niet de shell builtin 'time'?

Bash:
1
2
3
4
5
6
7
#! /bin/bash

function do_backup() {
 # implementatie hier
}

time do_backup
Ik heb geen toegang tot het backup script, dus ik ben gebonden aan de log file.
De overige oplossingen ga ik vandaag proberen.

The best thing about UDP jokes is that I don't care if you get them or not.


Acties:
  • 0 Henk 'm!

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 22:10
@MartinMeijerink
Bedankt!

Je code werkt zonder wijzigingen.

The best thing about UDP jokes is that I don't care if you get them or not.


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 18:19

MartinMeijerink

Niet van deze wereld

Ok cool :)

An unbreakable toy is useful to break other toys

Pagina: 1