Olá pessoal,
Espero que estejam bem.
Há algum tempo atrás, um antigo cliente me ligou informando que havia migrado seus servidores Linux de RHEL 6 para RHEL 7. Que haviam feito uma instalação nova de OS.
Por causa dessa migração, o agente do OEM não estava mais iniciando automaticamente. Isso se deu porque como o agente não foi reinstalado (e nem havia necessidade), o novo servidor não possuía os arquivos de inicialização e/ou configuração do agente no diretório /etc.
Os arquivos são:
- /etc/oragchomelist
- /etc/rc.d/init.d/gcstartup
- /etc/rc.d/init.d/lockgcstartup
- /etc/rc.d/init.d/unlockgcstartup
Também há os seguintes links simbólicos que apontam para os arquivos acima mencionados:
- /etc/rc.d/rc0.d/K19lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc0.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc0.d/K19gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc1.d/K19lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc1.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc1.d/K19gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc2.d/S98gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc2.d/S98lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc2.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc2.d/K19gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc3.d/S98gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc3.d/S98lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc3.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc3.d/K19gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc4.d/S98lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc4.d/S98unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc4.d/S98gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc5.d/S98lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc5.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc5.d/K19gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc5.d/S98gcstartup -> ../init.d/gcstartup
- /etc/rc.d/rc6.d/K19lockgcstartup -> ../init.d/lockgcstartup
- /etc/rc.d/rc6.d/K19unlockgcstartup -> ../init.d/unlockgcstartup
- /etc/rc.d/rc6.d/K19gcstartup -> ../init.d/gcstartup
Criarei um outro blog post em breve explicando como corrigir este problema, já que o objetivo desse blog post é criar um shell script que monitora se o agente está rodando em health state, e, caso não esteja em execução ou caso tenha algum problema, um e-mail será enviado.
Além disso, toda execução do script fará o append num log de execução dessa monitoria.
Basicamente o script fará algumas verificações:
- Quantos (count) processos do agente estão rodando.
- Qual é o status do agente.
Após isso, teremos um IF que verificará duas condições:
- Se o count é maior que zero (aqui queremos que o count seja 1);
- Se o status do agente é Agent is Running and Ready.
Se as duas condições forem verdadeiras, vai simplesmente adicionar uma linha no log de monitoria como o exemplo abaixo, no formato:
YYYYMMDD-HH24MI:OK
Se uma das duas condições (ou todas) não forem verdadeiras, significa que:
- A contagem é zero;
- Mesmo que a contagem seja 1, o agente pode estar rodando com algum problema e não é listado como Running and Ready.
Se isso acontecer, um email será enviado informando que o agente está down, além de adicionar uma linha no log de monitoria como o exemplo abaixo:
YYYYMMDD-HH24MI:NOK
Por fim, por favor, substitua o valor da variável EMAIL_ID de your_email@your_domain.com para o seu endereço de e-mail ou de alguma lista de distribuição do seu time.
OK, vamos ao script!
#!/bin/bash ################################################### # # Script to check if OEM agent is running # ################################################### export ORACLE_HOME=/oracle/PE1/OEM_13c_Agent/agent_13.4.0.0.0 export AGENT_INSTANCE_HOME=/oracle/PE1/OEM_13c_Agent/agent_inst export AGENT_BASE_DIR=/oracle/PE1/OEM_13c_Agent export PATH=${AGENT_INSTANCE_HOME}/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/oracle/PE1:.:/opt/VRTSvcs/bin export NAME_PATTERN=OEM_Agent_Check export WORK_DIR=/oracle/PE1/SCRIPT/${NAME_PATTERN} export TZ=America/Chicago export DATE_EXEC=$(date +"%Y%m%d-%H%M") export EMAIL_ID=your_email@your_domain.com AGENT_PROCESS_COUNT=$(ps -ef |grep ${AGENT_INSTANCE_HOME} |grep -v grep | wc -l) AGENT_STATUS=$(${AGENT_INSTANCE_HOME}/bin/emctl status agent |grep -i running) if [ ${AGENT_PROCESS_COUNT} -gt 0 ] && [ "${AGENT_STATUS}" == "Agent is Running and Ready" ]; then echo ${DATE_EXEC}:"OK" >> ${WORK_DIR}/.execution_history.log exit else mail-s "PE1 OEM Agent is down - ${DATE_EXEC} CST" ${EMAIL_ID} < /dev/null echo ${DATE_EXEC}:"NOK" >> ${WORK_DIR}/.execution_history.log fi
Espero que seja útil.
Um abraço,

Related posts
Disclaimer
Minhas postagens refletem minhas próprias opiniões e não representam necessariamente as opiniões do meu empregador, a Accenture.