All pastes #2073370 Raw Edit

Anonymous

public shellscript v1 · immutable
#2073370 ·published 2011-06-01 19:53 UTC
rendered paste body
#!/bin/bash## importa_destinatarios.sh - Importa os destinatarios dos arquivos txt/csv ou LDAP/AD do cliente## Site   : www.tibox.com.br# Autor  : Ricardo Felipe Klein <klein@tibox.com.br>## -----------------------------------------------------##  Importa os destinatarios dos arquivos txt/csv ou LDAP/AD do cliente#  ##  Exemplos:#       Se importacao proveniente de arquivos e o script deve gerar o CSV#       $ ./importa_destinatarios.sh \#               --cliente 1 \#               --javaopts "-Xms1024m -Xmx1024m" \#               --tipo_importacao F \#               --email_aviso "suporte@tibox.com.br suporte@cliente1.com.br" \#               --precisa_gerar_csv "S" \#               --path_arq_cliente "/home/cliente/import" \#               --files "arquivo01.txt arquivo02.csv"###       Se importacao proveniente de arquivos e o script nao precisa gerar o CSV#       $ ./importa_destinatarios.sh \#               --cliente 1 \#               --javaopts "-Xms1024m -Xmx1024m" \#               --tipo_importacao F \#               --email_aviso "suporte@tibox.com.br suporte@cliente1.com.br" \#               --path_arq_cliente "/home/<cliente>/import" \#               --files "arquivo01.txt arquivo02.csv"##       Se importacao proveniente de um LDAP/AD#       $ ./importa_destinatarios.sh \#               --cliente 1 \#               --javaopts "-Xms1024m -Xmx1024m" \#               --tipo_importacao L \#               --email_aviso "suporte@tibox.com.br suporte@cliente1.com.br" \#               --arq_yml "/path/to/file/arquivo.yml" \#               --connector_jar_path "/path/to/connector" \#               --connector_jar_bin "AllertConnector.jar"## -----------------------------------------------------## Historico:##       v0.1 2010-05-10, autor: Ricardo Felipe Klein#               - Versão inicial#                       - Envia email de alerta#                       - Passagem de parametros com --parametro valor## -----------------------------------------------------## Depende:#       - BASH#       - allert_import.jar#       - tree_generator.jar#       - gera_import.jar (opcional)#       - Permissão de escrita em /var/log/ e /var/run/ (o proprio script cria as pastas dele)#       - (parametro --cliente           ) Numero do cliente#       - (parametro --javaopts          ) Opcoes passadas ao java na hora de executar os jars#       - (parametro --tipo_importacao   ) Tipo de importacao (L)-LDAP/AD (F)-FILES#       - (parametro --email_aviso       ) Um ou mais enderecos de email que receberao os avisos em caso de problema#       - (parametro --path_arq_cliente  ) Se importacao FILES passa o path dos arquivos recebidos do cliente#       - (parametro --files             ) Se importacao FILES passa os nomes dos arquivos utilizados para gerar o CSV#       - (parametro --precisa_gerar_csv ) Se importacao FILES passar "S" sempre que precisar usar gera_import ou ex.:interface_porto#       - (parametro --arq_yml           ) Se importacao LDAP/AD passa o caminho/nome do arquivo YML#       - (parametro --connector_jar_path) Se importacao LDAP/AD passa o path do connector.jar#       - (parametro --connector_jar_bin ) Se importacao LDAP/AD passa o nome do connector.jar## -----------------------------------------------------## LE PARAMETROS#while test -n "$1"do        case "$1" in        --files)                shift                FILES="$1"                ;;        --javaopts)                shift                JAVAOPTS="$1"                ;;        --cliente)                shift                CLIENTE="$1"                ;;        --email_aviso)                shift                EMAIL_AVISO="$1"                ;;        --tipo_importacao)                shift                TIPO_IMPORTACAO="$1"                ;;        --path_arq_cliente)                shift                PATH_ARQ_CLIENTE="$1"                ;;        --arq_yml)                shift                ARQ_YML="$1"                ;;        --connector_jar_path)                shift                CONNECTOR_JAR_PATH="$1"                ;;        --connector_jar_bin)                shift                CONNECTOR_JAR_BIN="$1"                ;;        --precisa_gerar_csv)                shift                PRECISA_GERAR_CSV="$1"                ;;        --gera_import)                shift                GERA_IMPORT="$1"                ;;        esacshiftdone## VARIAVEIS#             ANO=$(date +%Y)             MES=$(date +%m)             DIA=$(date +%d)       SCRIPTS_DIR="/root"          PID_FILE="/var/run/allert/importa_destinatarios.pid"          LOG_FILE="/var/log/allert/importa_destinatarios.log"      MESSAGE_BODY="/root/scripts/message_body.txt"             SLEEP="2"              JAVA="/usr/lib/java/bin/java" ALLERT_IMPORT_DIR="/usr/local/include/import" ALLERT_IMPORT_BIN="$ALLERT_IMPORT_DIR/AllertImport.jar"TREE_GENERATOR_DIR="/usr/local/include/tree"TREE_GENERATOR_BIN="$TREE_GENERATOR_DIR/TreeGenerator.jar"          GERA_CSV="$SCRIPTS_DIR/gera_csv_$CLIENTE.sh"        IMPORT_DIR="/var/www/allert.com.br/clientes/$CLIENTE/import"               CSV="psql -t -A -U postgres -d desk_cms -c \"SELECT ds_arquivo FROM dicionario_arquivos WHERE cd_cliente=$CLIENTE;\" "        DIRETORIOS="/var/run/allert /var/log/allert $IMPORT_DIR/OLD"## FUNCOES DE CHECAGEM#checa_email_aviso () {        # Se $EMAIL_AVISO = NULL para o processo e exibe mensagem na tela        if [ -z "$EMAIL_AVISO" ]        then                echo "#########################################################"                echo "   WARNING!!! VOCE NAO PREENCHEU UM EMAIL DE AVISO!!!    "                echo "#########################################################"                exit 1        fi}checa_path_cliente () {        # Se $TIPO_IMPORTACAO=F, checa a existencia do $PATH_CLIENTE        if [ "$TIPO_IMPORTACAO" = "F" ] && [ "$PRECISA_GERAR_CSV" = "S" ]        then                if [ -d "$PATH_CLIENTE" ]                then                        echo ""                else                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "         WARNING!!! $PATH_CLIENTE nao existe!!!          "        >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        ENVIAR_EMAIL="1"                fi        fi}checa_arquivos_cliente () {        # Se a variavel $TIPO_IMPORTACAO for igual a F        # E $PATH_CLIENTE existir checa os arquivos        if [ "$TIPO_IMPORTACAO" = "F" ] && [ "$PRECISA_GERAR_CSV" = "S" ]        then                if [ -d $PATH_ARQ_CLIENTE ]                then                        ARQUIVO=""                        cd $PATH_ARQ_CLIENTE                        for ARQUIVO in $FILES                        do                                if [ -f $ARQUIVO ]                                        then                                                # Checa se o arquivo contem dados                                                if [ -s "$ARQUIVO" ]                                                then                                                        echo ""                                                else                                                        echo "#########################################################" >> $LOG_FILE 2>&1                                                        echo "  WARNING!!! - ARQUIVO $ARQUIVO ESTA VAZIO"                >> $LOG_FILE 2>&1                                                        echo "#########################################################" >> $LOG_FILE 2>&1                                                        ENVIAR_EMAIL="1"                                                fi                                        else                                                echo "#########################################################"        >> $LOG_FILE 2>&1                                                echo "         WARNING!!! $ARQUIVO NAO EXISTE "                         >> $LOG_FILE 2>&1                                                echo "#########################################################"        >> $LOG_FILE 2>&1                                                ENVIAR_EMAIL="1"                                fi                        done                fi        else                echo "#########################################################"        >> $LOG_FILE 2>&1                echo "   WARNING!!! O PATH $PATH_ARQ_CLIENTE  NAO EXISTE "              >> $LOG_FILE 2>&1                echo "#########################################################"        >> $LOG_FILE 2>&1                ENVIAR_EMAIL="1"        fi}checa_arquivos_csv () {        # Verifica os arquivos CSV        ARQUIVO=""        cd $IMPORT_DIR        for ARQUIVO in $CSV        do                # Checa se arquivo existe                if [ -f $ARQUIVO ]                then                        # Se existir, checa se tamanho maior que zero                        if [ -s $ARQUIVO ]                        then                                echo ""                        else                                echo "#########################################################"        >> $LOG_FILE 2>&1                                echo "         WARNING!!! $ARQUIVO ESTA VAZIO!!!"                       >> $LOG_FILE 2>&1                                echo "#########################################################"        >> $LOG_FILE 2>&1                                ENVIAR_EMAIL="1"                        fi                else                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "         WARNING!!! $ARQUIVO nao existe!!!"                       >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        ENVIAR_EMAIL="1"                fi        done}checa_tipo_importacao () {        # Verifica se o TIPO_IMPORTACAO = L ou F        if [ "$TIPO_IMPORTACAO" != "L" ] && [ "$TIPO_IMPORTACAO" != "F" ]        then                echo "#########################################################"        >> $LOG_FILE 2>&1                echo "    WARNING!!! TIPO_IMPORTACAO precisa ser F ou L !!!"            >> $LOG_FILE 2>&1                echo "#########################################################"        >> $LOG_FILE 2>&1                ENVIAR_EMAIL="1"        fi}checa_arq_yml () {        # Se a variavel $ARQ_YML estiver preenchida, testa o arquivo        if [ -n "$ARQ_YML" ]        then                # Verifica se o $ARQ_YML existe                if [ -f "$ARQ_YML" ]                then                        echo ""                else                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "            WARNING!!! - ARQUIVO YML NAO EXISTE          "        >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        ENVIAR_EMAIL="1"                fi                # Verifica se o $ARQ_YML contem dados                if [ -s "$ARQ_YML" ]                then                        echo ""                else                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "             WARNING!!! - ARQUIVO YML VAZIO              "        >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        ENVIAR_EMAIL="1"                fi        fi}checa_diretorios () {        # Verifica se os diretorios de log e pid existem, senao cria eles        for D in $DIRETORIOS; do                if [ -d $D ]                        then                                echo ""                        else                                mkdir -p $D                fi        done}checa_processo () {        # verifica se nao ha nenhum processo ativo        if [ -f $PID_FILE ]                then                        echo "`date`  -  Existe um processo ativo"                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "       WARNING!!! - EXISTE UM PROCESSO ATIVO        "             >> $LOG_FILE 2>&1                        echo "               PID: `cat $PID_FILE` "                             >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        ENVIAR_EMAIL="1"                else                        echo -e "\n \n"                                                         >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "     `date`  -  INICIANDO O PROCESSO"                             >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo -e "\n \n"                                                         >> $LOG_FILE 2>&1                        # Cria o PID file e deixa o PID do processo gravado nele                        echo $$ > $PID_FILE        fi}checa_fl_importacao_ativa () {        # Executa uma query no banco e verifica a fl_importacao_ativa        # Se for igual a "S", temos um problema nesta importacao ou tivemos na ultima        FL_IMPORTACAO_ATIVA=`su - postgres -c "psql -A -t -U postgres -d desk_cms -c \"SELECT fl_importacao_ativa FROM sistema WHERE cd_cliente=$CLIENTE; \" " `        if [ "$FL_IMPORTACAO_ATIVA" = "S" ]        then                        echo "#########################################################"        >> $LOG_FILE 2>&1                        echo "WARNING!!! - FL_IMPORTACAO_ATIVA=S PARA O CLIENTE $CLIENTE"       >> $LOG_FILE 2>&1                        echo "#########################################################"        >> $LOG_FILE 2>&1                        ENVIAR_EMAIL="1"        fi}checa_cliente_existe () {        # Executa uma query no banco e verifica se o cliente existe        # Se a variavel estiver nula eh porque o cliente nao existe        CLIENTE_EXISTE=`su - postgres -c "psql -A -t -U postgres -d desk_cms -c \"SELECT cd_cliente FROM clientes WHERE cd_cliente=$CLIENTE; \" " `        if [ -z "$CLIENTE_EXISTE" ]        then                echo "#########################################################"        >> $LOG_FILE 2>&1                echo "         WARNING!!! - O CLIENTE $CLIENTE NAO EXISTE"              >> $LOG_FILE 2>&1                echo "#########################################################"        >> $LOG_FILE 2>&1                ENVIAR_EMAIL="1"        fi}## FUNCOES DE IMPORTACAO#gera_import () {        if [ -f $GERA_CSV ]        then                # Se $TIPO_IMPORTACAO=F                if [ "$TIPO_IMPORTACAO" = "F" ]                then                        if [ -f "$PRECISA_GERAR_CSV" = "S" ]                        then                                # Gera os arquivos CSV de importacao a partir do sarquivos do cliente                                # usando o script personalizado de cada cliente                                sh $GERA_CSV --cliente $CLIENTE --javaopts $JAVAOPTS --path_arq_cliente $PATH_ARQ_CLIENTE --files $FILES --import_dir $IMPORT_DIR                        else                                #Apenas Copia os arquivos CSV para o path de importacao                                for ARQUIVO in $FILES                                do                                        cp $PATH_ARQ_CLIENTE/$ARQUIVO $IMPORT_DIR                                done                        fi                fi #if [ "$TIPO_IMPORTACAO" = "F" ]                # Se $TIPO_IMPORTACAO=L                if [ "$TIPO_IMPORTACAO" = "L" ]                then                        # Gera os arquivos CSV de importacao a partir do sarquivos do cliente                        # usando o script personalizado de cada cliente                        sh $GERA_CSV --cliente $CLIENTE --javaopts $JAVAOPTS --arq_yml $ARQ_YML --import_dir $IMPORT_DIR                fi #if [ "$TIPO_IMPORTACAO" = "L" ]        else #if [ -f $GERA_CSV ]                echo "#########################################################"        >> $LOG_FILE 2>&1                echo "WARNING!!! - O SCRIPT $GERA_CSV NAO EXISTE"                       >> $LOG_FILE 2>&1                echo "#########################################################"        >> $LOG_FILE 2>&1                ENVIAR_EMAIL="1"        fi #if [ -f $GERA_CSV ]}importa_dados() {        # importa os dados        # Simplesmente executa a importacao jogando toda a saida para o log        cd $ALLERT_IMPORT_DIR        echo -e "\n"                                                    >> $LOG_FILE 2>&1        echo -e "\n"                                                    >> $LOG_FILE 2>&1        echo "`date`  - IMPORTANDO ESTRUTURAS DO CLIENTE $CLIENTE"      >> $LOG_FILE 2>&1        $JAVA $JAVAOPTS -jar $ALLERT_IMPORT_BIN $CLIENTE -e -c -l       >> $LOG_FILE 2>&1        echo -e "\n"                                                    >> $LOG_FILE 2>&1        sleep $SLEEP        echo -e "\n"                                                    >> $LOG_FILE 2>&1        echo -e "\n"                                                    >> $LOG_FILE 2>&1        echo "`date`  - IMPORTANDO DESTINATARIOS DO CLIENTE $CLIENTE"   >> $LOG_FILE 2>&1        $JAVA $JAVAOPTS -jar $ALLERT_IMPORT_BIN $CLIENTE -u -c -l       >> $LOG_FILE 2>&1        echo -e "\n"                                                    >> $LOG_FILE 2>&1        sleep $SLEEP        mv $IMPORT_DIR/* $IMPORT_DIR/OLD/}tree_generator () {        # Roda o Tree_Generator        cd $TREE_GENERATOR_DIR        echo "`date`            - EXECUTANDO O TREE_GENERATOR PARA O CLIENTE $CLIENTE"  >> $LOG_FILE 2>&1        $JAVA $JAVAOPTS -jar $TREE_GENERATOR_BIN $CLIENTE                               >> $LOG_FILE 2>&1        sleep $SLEEP}## FUNCOES EXTRA#fim () {        # Grava o fim no log        echo -e "\n \n"                         >> $LOG_FILE 2>&1        echo "`date`  - THAT'S ALL FOLKS"       >> $LOG_FILE 2>&1        echo "#==============================#" >> $LOG_FILE 2>&1        echo -e "\n \n \n"                      >> $LOG_FILE 2>&1        # Deleta o PID_FILE        rm -rf $PID_FILE}envia_email () {        # Em caso de erro (condicoes em cada checagem) envia email para os destinatarios especificados        echo "Em anexo, arquivo de log do cliente $CLIENTE" > $MESSAGE_BODY        for EMAIL in $EMAIL_AVISO; do                mail -s "$ANO$MES$DIA Cliente $CLIENTE" -a $LOG_FILE $EMAIL < $MESSAGE_BODY        done}dos2unix_arquivos () {        # Garante que todos os arquivos estarao com o filetype=UNIX        if [ "$TIPO_IMPORTACAO" = "L" ]        then                dos2unix $ARQ_YML        fi        if [ "$TIPO_IMPORTACAO" = "F" ]        then                for ARQUIVO in $FILES                do                        dos2unix $PATH_ARQ_CLIENTE/$ARQUIVO                done                for ARQUIVO in $CSV                do                        dos2unix $ARQUIVO                done        fi}faz_rollback () {        # Em caso de erros na importacao executa um restore do backup        echo -e "\n\n\n"        echo "#########################################################"        >> $LOG_FILE 2>&1        echo "WARNING!!! - EFETUANDO RESTORE DE BACKUP"                         >> $LOG_FILE 2>&1        echo "`date`"                                                           >> $LOG_FILE 2>&1        echo "#########################################################"        >> $LOG_FILE 2>&1        # Dropa e recria a base vazia        su - postgres -c "psql -U postgres -c \"DROP DATABASE desk_cms;\" "        su - postgres -c "psql -U postgres -c \"CREATE DATABASE desk_cms WITH OWNER=desk_cms ENCODING='LATIN1';\""        # Copia o backup do dia para a pasta do postgres dando permissao de leitura para o user postgres nele        BKP_FILE="desk_cms-$ANO$MES$DIA.dump"        cp /var/backup/$ANO$MES$DIA/$BKP_FILE /var/lib/pgsql/        chown postgres.postgres /var/lib/pgsql/$BKP_FILE        # Efetua o restore        su - postgres -c "pg_restore -d desk_cms -F c $BKP_FILE"        # Remove o arquivo da pasta do postgres        rm -rf /var/lib/pgsql/$BKP_FILE        echo "#########################################################"        >> $LOG_FILE 2>&1        echo "`date`"                                                           >> $LOG_FILE 2>&1        echo "WARNING!!! - RESTORE DO BACKUP EFETUADO"                          >> $LOG_FILE 2>&1        echo "ARQUIVO UTILIZADO: $BKP_FILE"                                     >> $LOG_FILE 2>&1        echo "#########################################################"        >> $LOG_FILE 2>&1        echo -e "\n\n\n"}## PROCESSO## Garante que a flag ENVIAR_EMAIL esta vazia antes de iniciar o processo.ENVIAR_EMAIL=""PROCESSOS_DE_CHECAGEM="checa_diretorios checa_processo checa_email_aviso checa_cliente_existe checa_arq_yml checa_tipo_importacao checa_path_cliente checa_arquivos checa_fl_importacao_ativa"PROCESSO=""for PROCESSO in $PROCESSOS_DE_CHECAGEMdo        $PROCESSO        if [ "$ENVIAR_EMAIL" = "1" ]        then                envia_email                exit 1        fidonedos2unix_arquivosgera_importPROCESSOS_DE_CHECAGEM="checa_arquivos_csv"PROCESSO=""for PROCESSO in $PROCESSOS_DE_CHECAGEMdo        $PROCESSO        if [ "$ENVIAR_EMAIL" = "1" ]        then                envia_email                exit 1        fidoneimporta_dadostree_generatorPROCESSOS_DE_CHECAGEM="checa_fl_importacao_ativa"PROCESSO=""for PROCESSO in $PROCESSOS_DE_CHECAGEMdo        $PROCESSO        if [ "$ENVIAR_EMAIL" = "1" ]        then                faz_rollback                envia_email                exit 1        fidonefimif [ "$ENVIAR_EMAIL" = "1" ]then        envia_email        exit 1fi