[LØST]Bashscript sammenlign af tidsstempel
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
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
Kommentarer6
Dette giver dig tidsstemplet
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.
Du kan konvertere begge
Jeg prøver at forklare lidt
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
Kender ikke lige date util,
date: extra operand
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"`
[LØST]
#!/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