Почему это работает в терминале, а не в моем сценарии оболочки? - PullRequest
0 голосов
/ 28 июня 2018

Я проверяю таблицу базы данных для этого source_date, чтобы убедиться, что определенные файлы были загружены. Это source_date изменяется всякий раз, когда выполняется задача загрузки этих файлов, и на сервере Linux запускается скрипт. Я хочу предоставить предупреждение, когда это четверг, а source_date - более ранняя дата. Когда человек с ролью не завершает задачу после этой даты, он должен предоставить КРИТИЧЕСКОЕ сообщение. Сообщение в порядке, когда файлы загружены в четверг или в более позднюю дату.

Я запустил это через терминал, и он выдает правильный вывод, но не то же самое при выполнении в моем сценарии оболочки:

#! /bin/sh
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
#
#
LEVEL_WARNING=1
LEVEL_CRITICAL=2
#
#
script_name=$(basename $0)
output_file='/tmp/fs'
TEMP_DIR='/tmp'
SQL_USER='<USERNAME>'
SQL_SCHEMA='<PASSWORD>'
DATE=$(date +"%d-%^b-%y")
TODAY=$(date +"%u")
LAST=$(date --date="last thursday" +"%d-%^b-%y") 
#LAST='14-JUN-18'
THIS=$(date --date="this thursday" +"%d-%^b-%y")
exit_code=$STATE_OK
exit_string=''
free_space=0

# Check that the sanctions are up-to-date
function check_fs {
    touch "$TEMP_DIR"/"$script_name".sql
        if [ $? != 0 ]
        then
            echo 'Unable to create sql command file'
        exit "$STATE_CRITICAL"
    fi
    echo 'SET HEADING OFF'                                                                  >"$TEMP_DIR"/"$script_name".sql
    echo 'SET SPACE 0'                                                                      >>"$TEMP_DIR"/"$script_name".sql
    echo 'SET NEWPAGE 0'                                                                    >>"$TEMP_DIR"/"$script_name".sql
    echo 'SELECT SOURCE_DATE'                                                               >>"$TEMP_DIR"/"$script_name".sql
    echo 'FROM <TABLE>'                                                         >>"$TEMP_DIR"/"$script_name".sql
    echo 'WHERE ROWNUM = 1;'                                                                >>"$TEMP_DIR"/"$script_name".sql
    echo 'exit;'                                                                            >>"$TEMP_DIR"/"$script_name".sql 

    sqlplus -S $SQL_USER/$SQL_SCHEMA  @"$TEMP_DIR"/"$script_name".sql >$output_file
    sql_result="$(cat $output_file)"
    #sql_result="27-JUN-18"
    #TODAY="3"
    set -x

    # If the source_date isn't equal to the last Thursday date or if the source_date is less than last Thursday date or if today is Thursday
    if [ "$sql_result" = "$DATE" ] && [ "$TODAY" = "4" ];
    then
        echo 'OK - The source_date is on the ('$sql_result'). Today is ('$DATE').'
        exit "$STATE_OK"
    elif [ "$sql_result" > "$LAST" ];
    then
        echo 'OK - The source_date is on the ('$sql_result'). Today is ('$DATE').'
        exit "$STATE_OK"
    elif [ "$TODAY" = "4" ] && [ "$sql_result" != "$DATE" ];
    then
        echo 'WARNING - The source date is ('$sql_result') on the table. Please perform the steps for the FSL.'
        echo 'Last Thursday was ('$LAST').'
        exit "$STATE_WARNING" > /tmp/out 2>/tmp/err
    else
        echo 'CRITICAL - The source date is ('$sql_result') on the table! Please update the FSL as soon as possible!! The FS should have been completed on the ('$LAST').'
        exit "$STATE_CRITICAL"
    fi 


}

# Start script:
. /home/nagios/setdb.sh > /dev/null

check_fs

echo ""
echo "$exit_string"
exit "$exit_code"

Выход:

WARNING - The source date is (28-JUN-18) on the table. Please perform the steps for the FSL.
Last Thursday was (21-JUN-18).

Предполагаемый выход:

OK - The source_date is on the (28-JUN-18). Today is (28-JUN-18).

Выход в терминал: Добавлено после внесенных изменений, предложенных @ hootnot

+ '[' 'ERROR:
ORA-12546: TNS:permission denied' = 28-JUN-18 ']'
+ '[' 'ERROR:
ORA-12546: TNS:permission denied' ']'
+ echo 'OK - The source_date is on the (ERROR:' ORA-12546: TNS:permission 'denied). Today is (28-JUN-18).'
OK - The source_date is on the (ERROR: ORA-12546: TNS:permission denied). Today is (28-JUN-18).
+ exit 0

Отредактировано: чтобы отразить то, что @JNevill упомянул с помощью этой ссылки

...