• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af peque | 02.09.2015 20:02

[LØST]Bashscript sammenlign af tidsstempel

Hjælp generelt
hej Gruppe.
Jeg har et drillede problem som jeg ikke lige ved hvordan nemmest gribes an :-)

Jeg har et timestamp som jeg har i mit bash script - skrevet som "2015-06-21 12:40:00"

Hvordan kan jeg sammenligne dette med date kommandoen DATE=`date +%Y-%m-%d %H:%M:%S`og finde ud af om den er mere end 24 timer nemmest.
Jeg er klar over det skal konverteres til integer eller lign for at kunne sammenlignes, men syntes kun at kunne finde guides for datoen - ikke inkl timer. Det vigtige er her 24 timer/1 døgn

Hvis dette tidstempel er over 24 timer skal der ske en handling - alt dette er på plads - det er selve sammenligningen af de 2 datoer.

Hvordan kan jeg dette
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer6

# 1

9 år 10 måneder siden

Permalink

Indsendt af marlar den 2. september 2015 kl. 20:33

Permalink

Dette giver dig tidsstemplet

Dette giver dig tidsstemplet for samme tid i morgen:

date --date="+24 hours" "+%Y-%m-%d %H:%M:%S"

2015-09-03 20:32:49


Dette kan du så sammenligne. Du kan også skrive -24 hours for at få i går osv.

Edit: når jeg læser dit spørgsmål igen, er jeg usikker på om jeg har svaret på det rigtige. Du må lige forklare nærmere hvad du mener hvis jeg har ramt forkert.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

9 år 9 måneder siden

Permalink

Indsendt af lbm den 3. september 2015 kl. 06:50

Permalink

Du kan konvertere begge

Du kan konvertere begge tider til UNIX timestamp, trække dem fra hinanden og hvis forskellen er mere end 24 timer (i sekunder), så trig.
  • Log ind eller opret dig for at tilføje kommentarer

# 3

9 år 9 måneder siden

Permalink

Indsendt af peque den 3. september 2015 kl. 08:38

Permalink

Jeg prøver at forklare lidt

Jeg prøver at forklare lidt mere :-)

Jeg har en database med tabeller i - i disse tabeller er der et felt - timestamp - der skriver sin tid som
2015-06-21 12:40:00

Dette er tidspunktet for sidst inserted data - Dette skal sammenlignes med det aktuelle tid NU - og er den mere end 24timer siden - skal der trigges en mail.

Jeg har fået kringlet lidt hvordan jeg kan sammenligne disse tidstempler via dateutils i debian.
Da der er flere tabeller der tjekkes for hver gang - er tabeller lagt i array og for hver tabel - tjekker den alderen på tidstemplet.
Dette gøres ved at sende tidstemplet fra Database til en script der bruger dateutils.ddiff

Men når jeg sender det konkrete tidstempel til det script der tjekker filen - får jeg dette ud:
date: extra operand â%H:%M:%Sâ
For at bruge denne datekommando
DATE=`date +%Y-%m-%d %H:%M:%S`

Er det fordi jeg mangler quotes omkring eller lign






  • Log ind eller opret dig for at tilføje kommentarer

# 4

9 år 9 måneder siden

Permalink

Indsendt af lbm den 3. september 2015 kl. 09:10

Permalink

Kender ikke lige date util,

Kender ikke lige date util, men Som jeg skriver ovenfor du kan konvertere tiden til UNIX timestamp både i det fra DB'en og den lokale tid med date kommandoen.
  • Log ind eller opret dig for at tilføje kommentarer

# 5

9 år 9 måneder siden

Permalink

Indsendt af mrbrown79 den 3. september 2015 kl. 15:26

Permalink

date: extra operand

#3: date: extra operand â%H:%M:%Sâ
For at bruge denne datekommando
DATE=`date +%Y-%m-%d %H:%M:%S`

Er det fordi jeg mangler quotes omkring eller lign


Ja, ret til:
DATE=`date "+%Y-%m-%d %H:%M:%S"`
  • Log ind eller opret dig for at tilføje kommentarer

# 6

9 år 9 måneder siden

Permalink

Indsendt af peque den 4. september 2015 kl. 08:27

Permalink

[LØST]

Selve script ser således ud:

#!/bin/bash
# This script detects the age of latest data of tables.
# Rev 001:
# The script detects the age of timestamp in each table in DB
# Created Tabkes in Array and calls the check-script with the
# latest inserted timestamp in table.
# * ./check_age.sh
# Start with checking the date for 72hours and then 24hours
# And send a email
[ -r /script/config.sh ] && . /script/config.sh
# Params
TBL=$(mysql -D$DB -u$USER -p$PASSWD -se "SHOW TABLES")
# RECIEVER='pbj@insatech.com'

for t in "${TBL[@]}"
do
# DBGET=`mysql -u$USER -p$PASSWD -s -N -e "SELECT timestamp FROM $DB.$t order by timestamp desc limit 1"`
/script/check_age.sh $t

done

# EOF
################################################
# check_age.sh
#!/bin/bash
# This script is called from mysqldata_date.sh
# To check the latest timestamp againt the date
# now
[ -r /script/config.sh ] && . /script/config.sh

# Param
# Current time now
DATE=`date "+%Y-%m-%d %H:%M:%S"`
# Param from mysqldata.sh
TBL=$1
# Getting timestamp from DB
DBGET=`mysql -u$USER -p$PASSWD -s -N -e "SELECT timestamp FROM $DB.$TBL order by timestamp desc limit 1"`
# Return aINT value of days
RES=`/usr/bin/dateutils.ddiff -e "$DBGET" "$DATE" -f "%H"`
# Maillog for
LOG="/script/log"
# echo $RES

# Starting with more than 72 hours.
if [ $RES -gt 71 ]
then
touch $LOG
echo "The Table $TBL has not been updated for more than 72 hours!!!" >> $LOG
echo " " >> $LOG
echo "Please take action as soon as possible" >> $LOG
echo " " >> $LOG
echo "This is only a warning for outdated data in database" >> $LOG
mail -s "$DB MySQL Data more than 72 hours outdated" $REC < $LOG
rm -rf $LOG
exit
fi

if [ $RES -eq 24 ]
then
touch $LOG
echo "The Table $DB has not been updated for 24hours" >> $LOG
echo " " >> $LOG
echo "Please take action as soon as possible" >> $LOG
echo " " >> $LOG
echo "This is only a warning for outdated data in database" >> $LOG
mail -s "$DB MySQL Data 24 hours outdated" $REC < $LOG
rm -rf $LOG
exit
fi

#EOF
##################################
Og så samlet config param i config.sh
# /script/config.sh
####################################################
# This file contains the config file for MySQL Data
# Age Mail warning system for Insatech
# ##################################################
# Revision description in mysqldata.sh
####################################################

# MySQL Database
DB=" "

# MySQL User
USER=" "

# MySQL Password
PASSWD=" "

# Mail Reciever
REC=" "

# EOF



Dette tjekker i timer hvor gammel den sidse inserted statement i Mysql table field timestamp

Håber andre også kan få glæde af dette
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

PCLinuxOS 24
Gode anmeldelser Zorin OS 17.3 2
"Intet realistisk alternativ" - mig i r*ven 15
Nulstilling af adgangskode 3
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !