2015-02-17 3 views
0

Я новичок в shell/bash, и я пытаюсь выполнить функцию для очистки журналов в моих файлах Oracle. Окружающая среда, в которой я работаю, должна полностью открыть все журналы, но проблема заключается в заполнении томов и не разрешении перезапуска служб. Я пытаюсь создать сценарий для запуска в качестве задания cron для поиска каталогов в зависимости от того, в какой группе они входят (каждая группа имеет несколько разные пути и имена).Запуск скрипта на основе имени хоста внутри групповой переменной

У меня есть сценарий, проходящий через «VMORDER», который циклически перемещается по перечисленным группам. Я хочу, чтобы он вытащил имя хоста. Есть ли способ для меня сказать: «Если VM принадлежит к группе (т. Е. GP1, GP2 и т. Д.), Тогда запускайте сценарий« GP1s »?

Спасибо за любую помощь, которую вы можете предоставить :).

#!/bin/bash 
SCRIPTDIR=[SCRIPT DIR] 
GP1="vm01 vm02" 
GP2="vm03 vm04 vm05" 
GP3="vm06 vm07 vm08" 
VMORDER="GP1 GP2 GP3" 


##DIRECTORY PATHS 
VCIE_DIRECTORY=[DIRECTORY] 

##FILE EXCLUSION LISTING 
access_log='access.log' 
admin_server='AdminServer.log' 
admin_service='adminservice.log' 
app_ms_1='app_ms*.log' 
app_ms_2='app_ms*.out' 
app_wm_1='app_ms*.log' 
app_wm_2='app_ms*.out' 
audit_recorder_log='DefaultAuditRecorder.log' 
jms_log='jms*.log' 
osb_log='osb_domain.log' 
diagnostic_log='diagnostic.log' 

HNAME=$(hostname | cut -d'.' -f1 | tr [:lower:] [:upper:]) 

find_log_rotation(){ 
    for i in $(VMORDER) 
     do 
      clear_logs ${i} 
     done 
} 



clear_logs(){ 


    ##GP1 
    if [ $HNAME = GP1]; 
     find -P $VCIE_DIRECTORY/app_ms{1..4}/logs/ -type f -not -name "$app_ms_1" -not -name "$app_ms_2" -not -name "$access_log" -not -name "$audit_recorder_log" -not -name "$jms_log" -mtime 1  
    fi 

    ##GP2 
    if [ $HNAME = GP2]; 
     find -P $VCIE_DIRECTORY/app_wm{1..4}/logs/ -type f -not -name "$app_wm_1" -not -name "$app_wm_2" -not -name "$access_log" -not -name "$audit_recorder_log" -not -name "$jms_log" -mtime 1  
    fi 

    ##GP3 
    if [ $HNAME = GP3]; 
     find -P $VCIE_DIRECTORY/AdminServer/logs/ -type f -not -name "$admin_server" -not -name "$access_log" -not -name "$access_log" -not -name "$admin_service" -not -name "$osb_domain" -mtime 1   
    fi 
+0

Самая большая проблема у меня пытается получить его, чтобы проверить переменные, установленные в рамках группы .. Я в принципе хочу, чтобы найти $ {HNAME} и проверьте GP1, чтобы узнать, является ли имя хоста одной из этих двух переменных в GP1. Если это правда, тогда запустите скрипт, иначе переходите к следующему скрипту. – jdspringr07

ответ

0

Короткий ответ:

Когда имя хоста что-то вроде «vm04» унд вы не тр его в верхний регистр, вы можете использовать:

if [[ "${GP1}" = *${HNAME}* ]]; then 

двойной [] сделать это специальный синтаксис, прямо из = -sign - это выражение. Не помещайте кавычки вокруг него, что сделает его нормальной.

Длинный ответ
Действительно ли вам нужно искать разные файлы на разных серверах? Когда у вас нет файлов app_ms_1 в AdminServer, упрощение выбора файлов.

SKIP="${app_ms_1}|${app_ms_2}" 
SKIP="${SKIP}|${access_log}|${audit_recorder_log}|${jms_log}" 
SKIP="${SKIP}|${app_wm_1}|${app_wm_2}" 
SKIP="${SKIP}|${admin_server}|${osb_domain}" 

find ${VCIE_DIRECTORY}/*/logs -type f -mtime 1 | egrep -v "${SKIP}" | while read file; do 
    echo Something with ${file} 
done 

Сначала убедитесь, что код выше возвращает правильные файлы (должны SKIP уже $ {app_ms_3}, являются подстановочные обрабатываются корректно).

Вам нужно использовать ИМЯ?
Чем вы можете переписать код:

if [[ "${GP1}" = *${HNAME}* ]]; then 
    SKIP="${app_ms_1}|${app_ms_2}" 
    SKIP="${SKIP}|${access_log}|${audit_recorder_log}|${jms_log}" 
    STARTDIR=${VCIE_DIRECTORY}/app_ms{1..4}/logs/" 
fi 
# Something like this also for GP2 and GP3 
find ${STARTDIR} -type f -mtime 1 | egrep -v "${SKIP}" | xargs rm 
Смежные вопросы