Я проверяю таблицу базы данных для этого 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 упомянул с помощью этой ссылки