Scripts forskelle
Hej Gruppe.
Jeg har siddet og lavet et script som reelt fungerer på min test maskine.
http://www.linuxin.dk/node/21823
Nu har jeg uploadet til produktionsserveren som så giver mig en fejl i date.
Den eneste forskel jeg kan se er :
Testmaskine
Linux linux-mysql-slave 4.1.0-1-amd64 #1 SMP Debian 4.1.3-1 (2015-08-03) x86_64 GNU/Linux
Produktion:
Linux TTI-DEB01 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-2 (2015-04-13) x86_64 GNU/Linux
Kan det være Kernel der mangler noget
Jeg har siddet og lavet et script som reelt fungerer på min test maskine.
http://www.linuxin.dk/node/21823
Nu har jeg uploadet til produktionsserveren som så giver mig en fejl i date.
Den eneste forskel jeg kan se er :
Testmaskine
Linux linux-mysql-slave 4.1.0-1-amd64 #1 SMP Debian 4.1.3-1 (2015-08-03) x86_64 GNU/Linux
Produktion:
Linux TTI-DEB01 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-2 (2015-04-13) x86_64 GNU/Linux
Kan det være Kernel der mangler noget
Kommentarer6
Kan det være Kernel der
Næppe, men der kan være opsætningsforskelle og forskelle i bash eller de enkelte kommandoer, du bruger.
Prøv at afvikle scriptet med:
bash -x [script]
Og se om du kan lure, hvor det går galt.
Kører du det som cronjob?
Meningen var det skulle
Henter tiden NU'
DATE=`date "+%Y-%m-%d %H:%M:%S"`
Samligner det modtagne fra DB med $DATE
RES=`/usr/bin/dateutils.ddiff -e "$DBGET" "$DATE" -f "%H"`
Og når jeg Echo $DATE
så ser den korrekt ud
2015-09-11 07:59:54
Den fejl jeg reelt får er denne
ddiff: Error: reference DATE must be specified
Og som jeg kan se - er det fordi jeg ikke får hentet den tid fra min database hvor jeg har timestamp. Derfor undrer det mig lidt.
På test har dette virket uden problemer, med bash -x kan jeg se mine parametre bliver hentet men reelt set fejler det i denne kommando:
DBGET=`mysql -u$USER -p$PASSWD -D$DB -s -N -e "SELECT timestamp FROM $DB.$TBL order by timestamp desc limit 1"`
Kører jeg den manuelt i hånden er der ingen problemer så får jeg det rigtige tidsstempel
Hmmmm
Nu har jeg vist fundet
Nu har jeg vist fundet fejlen
Jeg starter med at hive tabellerne ud af databasen:
#!/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_for_timestamp.sh
# Start with checking the date for 72hours and then 24hours
# And send a email
[ -r /scripts/config.sh ] && . /scripts/config.sh
# Params
TBL=$(mysql -D$DB -u$USER -p$PASSWD -se "SHOW TABLES")
for t in "${TBL[@]}"
do
/scripts/check_age.sh $t
done
# EOF
Der skulle det gerne indlæses som et array - og for hver instanse i Arrayet - skal den køre scriptet check_age.sh (Tabelnavn)
Nu kan jeg så se følgende linie kommer under kørsel af -x :
/scripts/check_age.sh TBL1 TBL2 TBL3 TBL4
Meningen er jo lidt at den skal tage for hvert linie i mit array skal den køre seperat - som jeg ser dette - er der for mange parametre med. Hvad går galt i mit lille script
Hvad går galt i mit
Jeg ville prøve uden anførselstegn i for-loopen:
for t in ${TBL[@]}
do
/scripts/check_age.sh $t
done
Tak - Det havde jeg nu
Tak - Det havde jeg nu ikke lige tænkt på det var dem der drillede!
Det reddede sgu min dag.
:-)
Det reddede sgu min
Super! :)