Scripts forskelle

peque
Antal: 917
Tilmeldt:
20-04-2005
User is offline
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


mrbrown79
Antal: 470
Tilmeldt:
12-01-2010
User is offline
Kan det være Kernel der

#0: Kan det være Kernel der mangler noget

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?


peque
Antal: 917
Tilmeldt:
20-04-2005
User is offline
Meningen var det skulle

Meningen var det skulle køre som cronjob, men dette er ikke sat op endnu - har kun testet med at køre det manuelt.

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


peque
Antal: 917
Tilmeldt:
20-04-2005
User is offline
Hmmmm Nu har jeg vist fundet

Hmmmm
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


mrbrown79
Antal: 470
Tilmeldt:
12-01-2010
User is offline
Hvad går galt i mit

#3: Hvad går galt i mit lille script

Jeg ville prøve uden anførselstegn i for-loopen:

for t in ${TBL[@]}
        do
        /scripts/check_age.sh $t

done


peque
Antal: 917
Tilmeldt:
20-04-2005
User is offline
Tak - Det havde jeg nu

#4:
Tak - Det havde jeg nu ikke lige tænkt på det var dem der drillede!

Det reddede sgu min dag.
:-)


mrbrown79
Antal: 470
Tilmeldt:
12-01-2010
User is offline
Det reddede sgu min

#5: Det reddede sgu min dag.

Super! :)