From: Lee B. <kal...@gm...> - 2010-01-20 18:34:34
|
Complete branch can be found at git://github.com/kalebral/Drizzle-dbt2.git Changes to scripts in the bin directory to get everything working. dbt2-get-os-info and dbt2-sysstats need to run as bash shell dbt2-run-workload - changed readme.txt to logfile.txt and output more commands to the logfile as they are executed --- bin/dbt2-get-os-info | 2 +- bin/dbt2-run-workload | 163 ++++++++++++++++++++++++++++++------------------- bin/dbt2-sysstats | 2 +- 3 files changed, 102 insertions(+), 65 deletions(-) diff --git a/bin/dbt2-get-os-info b/bin/dbt2-get-os-info index a4be4dc..d756372 100755 --- a/bin/dbt2-get-os-info +++ b/bin/dbt2-get-os-info @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # This file is released under the terms of the Artistic License. diff --git a/bin/dbt2-run-workload b/bin/dbt2-run-workload index 1ecd215..5cadd9d 100755 --- a/bin/dbt2-run-workload +++ b/bin/dbt2-run-workload @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # This file is released under the terms of the Artistic License. @@ -8,14 +8,14 @@ # trap 'echo "Test was interrupted by Control-C."; \ - killall dbt2-client dbt2-driver sar sadc vmstat iostat mpstat iopp; ${DB_COMMAND} dbt2-${DBMS}-stop-db sar sadc vmstat iostat mpstat iopp' INT + killall dbt2-client dbt2-driver sar sadc vmstat iostat mpstat iopp; ${DB_COMMAND} dbt2-${DBMS}-stop-db sar sadc vmstat iostat mpstat iopp' INT trap 'echo "Test was interrupted. Got TERM signal."; \ killall dbt2-client dbt2-driver sar sadc vmstat iostat mpstat iopp; ${DB_COM -MAND} dbt2-${DBMS}-stop-db sar sadc vmstat iostat mpstat iop' TERM +MAND} dbt2-${DBMS}-stop-dbt sar sadc vmstat iostat mpstat iop' TERM do_sleep() { - echo "Sleeping $1 seconds" + echo "Sleeping $1 seconds" | tee -a $LOGFILE sleep $1 } @@ -44,7 +44,7 @@ oprofile_annotate() else HOST=`hostname` fi - echo "oprofile is annotating source: ${HOST}" + echo "oprofile is annotating source: ${HOST}" | tee -a $LOGFILE ${COMMAND} mkdir -p ${OPROFILE_DIR} ${COMMAND} mkdir -p ${ANNOTATED_DIR} if [ -n "${COMMAND}" ]; then @@ -75,21 +75,21 @@ oprofile_collect() # # I don't think we need any output dumped to the terminal. # - echo "oprofile is dumping data: ${HOST}" + echo "oprofile is dumping data: ${HOST}" | tee -a $LOGFILE ${COMMAND} sudo opcontrol --dump if [ -n "${COMMAND}" ]; then ${COMMAND} mkdir -p ${OPROFILE_DIR} ${COMMAND} mkdir -p ${ANNOTATED_DIR} - echo "Generating oprofile profile on '${HOST}'..." + echo "Generating oprofile profile on '${HOST}'..." | tee -a $LOGFILE ${COMMAND} "sudo opreport -l -p /lib/modules/`${COMMAND} uname -r` -o ${DIR}/oprofile.txt > ${OPROFILE_DIR}/oprofile.log 2>&1" - echo "Generating oprofile callgraph on '${HOST}'..." + echo "Generating oprofile callgraph on '${HOST}'..." | tee -a $LOGFILE ${COMMAND} "sudo opreport -l -c -p /lib/modules/`${COMMAND} uname -r` -o ${OPROFILE_DIR}/callgraph.txt > ${OPROFILE_DIR}/oprofile.log 2>&1" else - echo "Generating oprofile profile..." + echo "Generating oprofile profile..." | tee -a $LOGFILE sudo opreport -l -p /lib/modules/`uname -r` \ -o ${OPROFILE_DIR}/oprofile.txt > \ ${OPROFILE_DIR}/oprofile.log 2>&1 - echo "Generating oprofile callgraph..." + echo "Generating oprofile callgraph..." | tee -a $LOGFILE sudo opreport -l -c -p /lib/modules/`uname -r` \ -o ${OPROFILE_DIR}/callgraph.txt > \ ${OPROFILE_DIR}/oprofile.log 2>&1 @@ -108,7 +108,7 @@ oprofile_init() else HOST=`hostname` fi - echo "starting oprofile: ${HOST}" + echo "starting oprofile: ${HOST}" | tee -a $LOGFILE ${COMMAND} sudo opcontrol \ --vmlinux=/lib/modules/`${COMMAND} uname -r`/vmlinux \ -c 100 @@ -137,7 +137,7 @@ oprofile_reset() else HOST=`hostname` fi - echo "resetting oprofile counters: ${HOST}" + echo "resetting oprofile counters: ${HOST}" | tee -a $LOGFILE ${COMMAND} sudo opcontrol --reset } @@ -150,7 +150,7 @@ oprofile_stop() else HOST=`hostname` fi - echo "stopping oprofile daemon: ${HOST}" + echo "stopping oprofile daemon: ${HOST}" | tee -a $LOGFILE ${COMMAND} sudo opcontrol --shutdown } @@ -159,10 +159,12 @@ post_process_sar() COMMAND="" FILE=${1} HOST=${2} - if [ ! "x${HOST}" = "x" ]; then + if [ ! "x${HOST}" = "x" -a ! "${DB_HOSTNAME}" = "localhost" ] ; then COMMAND="ssh ${HOST}" + echo "${COMMAND} sar -f ${FILE} -A > `dirname ${FILE}`/sar.out" | tee -a $LOGFILE ${COMMAND} "sar -f ${FILE} -A > `dirname ${FILE}`/sar.out" else + echo "sar -f ${FILE} -A > `dirname ${FILE}`/sar.out" | tee -a $LOGFILE sar -f ${FILE} -A > `dirname ${FILE}`/sar.out fi } @@ -178,7 +180,7 @@ readprofile_collect() else HOST=`hostname` fi - echo "collecting readprofile data: ${HOST}" + echo "collecting readprofile data: ${HOST}" | tee -a $LOGFILE PROFILE=${RP_DIR}/readprofile.txt if [ -n "${COMMAND}" ]; then ${COMMAND} mkdir -p ${RP_DIR} @@ -202,7 +204,7 @@ readprofile_clear() else HOST=`hostname` fi - echo "clearing readprofile data: ${HOST}" + echo "clearing readprofile data: ${HOST}" | tee -a $LOGFILE ${COMMAND} sudo /usr/sbin/readprofile -r } @@ -214,12 +216,15 @@ usage() fi echo echo "usage: `basename $0` -h" - echo "usage: `basename $0` -a <mysql|pgsql|sqlite>" + echo "usage: `basename $0` -a <drizzle|mysql|pgsql|sqlite>" echo " -c <number of database connections> -d <seconds>" echo " -w <number of warehouses> -o <path> [options]" echo "options:" echo " -d <duraction of test in seconds>" echo " -H <database host name. (default localhost)>" + if [ "${DBMS}" = "drizzle" ]; then + echo " -i <drizzle working or installation directory>" + fi echo " -l <database port number>" echo " -q <enable oprofile data collection>" echo " -s <delay of starting of new threads in milliseconds>" @@ -247,7 +252,9 @@ validate_parameter() DB_HOSTNAME="localhost" DB_PASSWORD="" DB_PARAMS="" +DBNAME="dbt2" CLIENT_HOSTNAME="localhost" +WORKING_DIR="" DB_USER=${DBUSER} SLEEPY=1000 # milliseconds @@ -260,7 +267,7 @@ USE_PGPOOL=0 # W_CHUNK=500 -while getopts "a:b:c:d:H:hl:no:p:qs:t:u:w:x:z:" opt; do +while getopts "a:b:c:d:H:hi:l:no:p:qs:t:u:w:x:z:" opt; do case $opt in a) DBMS=${OPTARG} @@ -285,6 +292,10 @@ while getopts "a:b:c:d:H:hl:no:p:qs:t:u:w:x:z:" opt; do usage exit 1 ;; + i) + # installation or working directory where drizzled and drizzle can be found + WORKING_DIR=${OPTARG} + ;; l) DB_PORT=`echo $OPTARG | egrep "^[0-9]+$"` validate_parameter $opt $OPTARG $DB_PORT @@ -328,7 +339,7 @@ done # Check parameters. if [ "x${DBMS}" = "x" ]; then - echo "specify which dbms system to test using -a <mysql|pgsql|sqlite>" + echo "specify which dbms system to test using -a <drizzle|mysql|pgsql|sqlite>" exit 1 fi @@ -398,87 +409,102 @@ if [ -n ${DB_HOSTNAME} -a ! "${DB_HOSTNAME}" = "localhost" ]; then ${DB_HOSTNAME}:${DB_OUTPUT_DIR}/ fi -# Create a readme file in the output directory and date it. -date >> ${OUTPUT_DIR}/readme.txt -echo "$COMMENT" >> ${OUTPUT_DIR}/readme.txt -uname -a >> ${OUTPUT_DIR}/readme.txt -echo "Command line: $0 $@" >> ${OUTPUT_DIR}/readme.txt +# Create a logfile file in the output directory and date it. +LOGFILE=${OUTPUT_DIR}/logfile.txt +date > $LOGFILE +echo "$COMMENT" >> $LOGFILE +uname -a >> $LOGFILE +echo "Command line: $0 $@" | tee -a $LOGFILE # Get any OS specific information, if this is a single trier test, then # the OS parameters will be in the driver output directory. +echo "dbt2-get-os-info -o ${DRIVER_OUTPUT_DIR}/`hostname`/" | tee -a $LOGFILE dbt2-get-os-info -o ${DRIVER_OUTPUT_DIR}/`hostname`/ -# Output run information into the readme.txt. -echo "Database Scale Factor: $WAREHOUSES warehouses" >> ${OUTPUT_DIR}/readme.txt -echo "Test Duration: $DURATION seconds" >> ${OUTPUT_DIR}/readme.txt -echo "Database Connections: $DBCON" >> ${OUTPUT_DIR}/readme.txt +# Output run information into the logfile +echo "Database Scale Factor: $WAREHOUSES warehouses" | tee -a $LOGFILE +echo "Test Duration: $DURATION seconds" | tee -a $LOGFILE +echo "Database Connections: $DBCON" | tee -a $LOGFILE if [ -n ${DB_HOSTNAME} -a ! "${DB_HOSTNAME}" = "localhost" ]; then DB_COMMAND="ssh ${DB_HOSTNAME}" # Get the OS information from the database system. + echo "${DB_COMMAND} dbt2-get-os-info -o ${DB_OUTPUT_DIR}" | tee -a $LOGFILE ${DB_COMMAND} dbt2-get-os-info -o ${DB_OUTPUT_DIR} ${DB_COMMAND} "uname -a >> ${DB_OUTPUT_DIR}/readme.txt" fi -${DB_COMMAND} dbt2-${DBMS}-stop-db +echo "${DB_COMMAND} dbt2-${DBMS}-stop-db ${WORKING_DIR}" | tee -a $LOGFILE +${DB_COMMAND} dbt2-${DBMS}-stop-db ${WORKING_DIR} if [ $? -ne 0 ]; then - echo "cleaning up results..." + echo "cleaning up results..." | tee -a $LOGFILE rm -rf ${OUTPUT_DIR} exit 1 fi if [ -n "${DB_COMMAND}" ]; then + echo "${DB_COMMAND} dbt2-${DBMS}-start-db ${START_DB_ARGS} -p \"${DB_PARAMS}\" -o ${DB_OUTPUT_DIR}" | tee -a $LOGFILE ${DB_COMMAND} "dbt2-${DBMS}-start-db ${START_DB_ARGS} -p \"${DB_PARAMS}\" -o ${DB_OUTPUT_DIR}" || exit 1 else - dbt2-${DBMS}-start-db ${START_DB_ARGS} \ + if [ "${DBMS}" = "drizzle" ]; then + echo "dbt2-${DBMS}-start-db ${WORKING_DIR}" | tee -a $LOGFILE + dbt2-${DBMS}-start-db ${WORKING_DIR} + else + echo "dbt2-${DBMS}-start-db ${START_DB_ARGS} -p ${DB_PARAMS} -o ${DB_OUTPUT_DIR}" | tee -a $LOGFILE + dbt2-${DBMS}-start-db ${START_DB_ARGS} \ -p "${DB_PARAMS}" -o ${DB_OUTPUT_DIR} || exit 1 + fi fi # # Redisplay the test parameters. # -echo "DBT-2 test for ${DBMS} started..." -echo "" -echo "DATABASE SYSTEM: ${DB_HOSTNAME}" -echo "DATABASE NAME: ${DBNAME}" +echo "DBT-2 test for ${DBMS} started..." | tee -a $LOGFILE +echo "" | tee -a $LOGFILE +if [ -n "${DB_HOSTNAME}" ]; then + echo "DATABASE SYSTEM: ${DB_HOSTNAME}" | tee -a $LOGFILE + CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -h ${DB_HOSTNAME}" +fi + +echo "DATABASE NAME: ${DBNAME}" | tee -a $LOGFILE # # Build up the client command line arguments. # if [ -n "${DB_USER}" ]; then - echo "DATABASE USER: ${DB_USER}" + echo "DATABASE USER: ${DB_USER}" | tee -a $LOGFILE CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -u ${DB_USER}" fi if [ -n "${DB_PASSWORD}" ]; then - echo "DATABASE PASSWORD: *******" + echo "DATABASE PASSWORD: *******" | tee -a $LOGFILE CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -a ${DB_PASSWORD}" fi if [ -n "${DB_SOCKET}" ]; then - echo "DATABASE SOCKET: ${DB_SOCKET}" + echo "DATABASE SOCKET: ${DB_SOCKET}" | tee -a $LOGFILE CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -t ${DB_SOCKET}" fi if [ -n "${DB_PORT}" ]; then - echo "DATABASE PORT: ${DB_PORT}" + echo "DATABASE PORT: ${DB_PORT}" | tee -a $LOGFILE CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} ${DB_PORT_ARG}" fi THREADS=$(( ${WAREHOUSES}*${THREADS_PER_WAREHOUSE} )) -echo "DATABASE CONNECTIONS: ${DBCON}" -echo "TERMINAL THREADS: ${THREADS}" -echo "TERMINALS PER WAREHOUSE: ${THREADS_PER_WAREHOUSE}" -echo "WAREHOUSES PER THREAD/CLIENT PAIR: ${W_CHUNK}" -echo "SCALE FACTOR (WAREHOUSES): ${WAREHOUSES}" -echo "DURATION OF TEST (in sec): ${DURATION}" -echo "1 client stared every ${SLEEPY} millisecond(s)" -echo "" +echo "DATABASE CONNECTIONS: ${DBCON}" | tee -a $LOGFILE +echo "TERMINAL THREADS: ${THREADS}" | tee -a $LOGFILE +echo "TERMINALS PER WAREHOUSE: ${THREADS_PER_WAREHOUSE}" | tee -a $LOGFILE +echo "WAREHOUSES PER THREAD/CLIENT PAIR: ${W_CHUNK}" | tee -a $LOGFILE +echo "SCALE FACTOR (WAREHOUSES): ${WAREHOUSES}" | tee -a $LOGFILE +echo "DURATION OF TEST (in sec): ${DURATION}" | tee -a $LOGFILE +echo "1 client stared every ${SLEEPY} millisecond(s)" | tee -a $LOGFILE +echo "" | tee -a $LOGFILE # # Start the client. # -echo "Stage 1. Starting up client..." +echo "Stage 1. Starting up client..." | tee -a $LOGFILE if [ ${DBMS} = "pgsql" ]; then if [ ${USE_PGPOOL} -eq 1 ]; then echo "Starting pgpool..." @@ -492,6 +518,8 @@ elif [ ${DBMS} = "mysql" ]; then CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -d ${DBNAME} -t /tmp/mysql.sock" elif [ ${DBMS} = "sqlite" ]; then CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -d ${DB_PARAMS}" +elif [ ${DBMS} = "drizzle" ]; then + CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -d ${DBNAME}" fi CLIENT_COMMAND_ARGS="${CLIENT_COMMAND_ARGS} -f -c ${DBCON} -s ${SLEEPY}" END=0 @@ -512,6 +540,7 @@ while (( ${END} < ${WAREHOUSES} )); do CDIR="${CLIENT_OUTPUT_DIR}/`hostname`.${SEG}" mkdir -p ${CDIR} + echo "dbt2-client ${CLIENT_COMMAND_ARGS} -p ${PORT} -o ${CDIR} > ${CLIENT_OUTPUT_DIR}/`hostname`/client-${SEG}.out" | tee -a $LOGFILE dbt2-client ${CLIENT_COMMAND_ARGS} -p ${PORT} -o ${CDIR} > \ ${CLIENT_OUTPUT_DIR}/`hostname`/client-${SEG}.out 2>&1 || exit 1 & PORT=$(( ${PORT} + 1 )) @@ -526,15 +555,18 @@ SLEEP_RAMPUP=$(( ((${W_CHUNK} + 1) * 10 * ${SLEEPY} / 1000) )) SLEEPYTIME=$(( $SLEEP_RAMPUP+$DURATION )) SAMPLE_LENGTH=60 ITERATIONS=$(( ($SLEEPYTIME/$SAMPLE_LENGTH)+1 )) +echo "dbt2-sysstats --iter ${ITERATIONS} --sample ${SAMPLE_LENGTH} --outdir ${DRIVER_OUTPUT_DIR}/`hostname` > ${DRIVER_OUTPUT_DIR}/`hostname`/stats.out" | tee -a $LOGFILE dbt2-sysstats \ --iter ${ITERATIONS} \ --sample ${SAMPLE_LENGTH} \ --outdir ${DRIVER_OUTPUT_DIR}/`hostname` > ${DRIVER_OUTPUT_DIR}/`hostname`/stats.out 2>&1 & if [ -n ${DB_HOSTNAME} -a ! "${DB_HOSTNAME}" = "localhost" ]; then + echo "${DB_COMMAND} dbt2-sysstats --iter ${ITERATIONS} --sample ${SAMPLE_LENGTH} --outdir ${DB_OUTPUT_DIR} > ${DB_OUTPUT_DIR}/stats.out " | tee -a $LOGFILE ${DB_COMMAND} "dbt2-sysstats --iter ${ITERATIONS} --sample ${SAMPLE_LENGTH} --outdir ${DB_OUTPUT_DIR} > ${DB_OUTPUT_DIR}/stats.out 2>&1" & fi -echo "collecting database statistics..." +echo "collecting database statistics..." | tee -a $LOGFILE +echo "${DB_COMMAND} dbt2-${DBMS}-db-stat -o ${DB_OUTPUT_DIR} -i ${ITERATIONS} -s ${SAMPLE_LENGTH} ${DB_PORT_ARG} > ${DB_OUTPUT_DIR}/dbstats.out" | tee -a $LOGFILE ${DB_COMMAND} dbt2-${DBMS}-db-stat \ -o ${DB_OUTPUT_DIR} -i ${ITERATIONS} -s ${SAMPLE_LENGTH} \ ${DB_PORT_ARG} > ${DB_OUTPUT_DIR}/dbstats.out 2>&1 & @@ -548,9 +580,9 @@ if [ ${USE_OPROFILE} -eq 1 ]; then fi # Start the driver. -echo '' -echo "Stage 2. Starting up driver..." -echo "${SLEEPY} threads started per millisecond" +echo '' | tee -a $LOGFILE +echo "Stage 2. Starting up driver..." | tee -a $LOGFILE +echo "${SLEEPY} threads started per millisecond" | tee -a $LOGFILE END=0 START=1 @@ -572,13 +604,14 @@ while (( ${END} < ${WAREHOUSES} )); do mkdir -p ${DDIR} DRIVER_COMMAND_ARGS="-d ${CLIENT_HOSTNAME} -p ${PORT} -l ${DURATION} -wmin ${START} -wmax ${END} -w ${WAREHOUSES} -sleep ${SLEEPY} -outdir ${DDIR} -tpw ${THREADS_PER_WAREHOUSE} ${NO_THINK}" PORT=$(( ${PORT} + 1 )) + echo "dbt2-driver ${DRIVER_COMMAND_ARGS} > ${DRIVER_OUTPUT_DIR}/`hostname`/driver-${SEG}.out" | tee -a $LOGFILE dbt2-driver ${DRIVER_COMMAND_ARGS} > \ ${DRIVER_OUTPUT_DIR}/`hostname`/driver-${SEG}.out 2>&1 || exit 1& done -echo -n "estimated rampup time: " +echo -n "estimated rampup time: " | tee -a $LOGFILE do_sleep $SLEEP_RAMPUP -echo "estimated rampup time has elapsed" +echo "estimated rampup time has elapsed" | tee -a $LOGFILE # Clear the readprofile data after the driver ramps up. if [ -f "/proc/profile" ]; then @@ -597,7 +630,7 @@ if [ ${USE_OPROFILE} -eq 1 ]; then fi # Sleep for the duration of the run. -echo -n "estimated steady state time: " +echo -n "estimated steady state time: " | tee -a $LOGFILE do_sleep $DURATION # Collect readprofile data. @@ -616,14 +649,14 @@ if [ ${USE_OPROFILE} -eq 1 ]; then fi fi -echo '' -echo "Stage 3. Processing of results..." +echo '' | tee -a $LOGFILE +echo "Stage 3. Processing of results..." | tee -a $LOGFILE # Client doesn't go away by itself like the driver does, so kill it. -echo "Killing client..." +echo "Killing client..." | tee -a $LOGFILE killall dbt2-client dbt2-driver 2> /dev/null - -${DB_COMMAND} dbt2-${DBMS}-stop-db +# +${DB_COMMAND} dbt2-${DBMS}-stop-db ${WORKING_DIR} if [ ${DBMS} = "pgsql" ]; then if [ ${USE_PGPOOL} -eq 1 ]; then pgpool -f ${DIR}/pgsql/pgpool.conf stop @@ -631,6 +664,7 @@ if [ ${DBMS} = "pgsql" ]; then fi # Run some post processing analysese. +echo "dbt2-post-process --dir ${OUTPUT_DIR} > ${REPORT_FILE}" | tee -a $LOGFILE dbt2-post-process --dir ${OUTPUT_DIR} > ${REPORT_FILE} if [ ${USE_OPROFILE} -eq 1 ]; then @@ -649,7 +683,8 @@ if [ ${USE_OPROFILE} -eq 1 ]; then fi post_process_sar ${DRIVER_OUTPUT_DIR}/`hostname`/sar_raw.out -post_process_sar ${DB_OUTPUT_DIR}/sar_raw.out ${DB_HOSTNAME} +# NOTE - commenting out below for now, this file does not exist +#post_process_sar ${DB_OUTPUT_DIR}/sar_raw.out ${DB_HOSTNAME} # Postprocessing of Database Statistics @@ -657,6 +692,7 @@ if [ -n ${DB_HOSTNAME} -a ! "${DB_HOSTNAME}" = "localhost" ]; then # # If a database system is specified, rsync all the logs back to here. # + echo "rsync -a -e "ssh" --delete ${DB_HOSTNAME}:${DB_OUTPUT_DIR}/ ${DB_OUTPUT_DIR}/" | tee -a $LOGFILE rsync -a -e "ssh" --delete ${DB_HOSTNAME}:${DB_OUTPUT_DIR}/ \ ${DB_OUTPUT_DIR}/ fi @@ -668,11 +704,12 @@ if [ -f "${DB_OUTPUT_DIR}/log" ]; then fi if [ -f "dbt2-${DBMS}-analyze-stats" ]; then + echo "dbt2-${DBMS}-analyze-stats --dir ${DB_OUTPUT_DIR}" | tee -a $LOGFILE dbt2-${DBMS}-analyze-stats --dir ${DB_OUTPUT_DIR} fi -echo "Test completed." -echo "Results are in: ${OUTPUT_DIR}" +echo "Test completed." | tee -a $LOGFILE +echo "Results are in: ${OUTPUT_DIR}" | tee -a $LOGFILE echo cat ${REPORT_FILE} diff --git a/bin/dbt2-sysstats b/bin/dbt2-sysstats index b574fdb..9816ce5 100755 --- a/bin/dbt2-sysstats +++ b/bin/dbt2-sysstats @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # This file is released under the terms of the Artistic License. |