Vamos deixar o Siebel como serviço no Linux para iniciá-lo (containeres tomcat, gateway, siebel server, debug server e o que mais você quiser no startup do Sistema Operacional) e forçar a finalização da mesma tranqueira no shutdown da SO.
Artigo curtinho. Pá! Sem enrolação.
“Mas, Neilson, por quê?”Ora. Se você tem shell scripts de startup e shutdown já malandreados com tudo que você precisa, testados trocentas vezes e garantidamente funcionais, por que não automatizar tudo? Isso acelera demais os reboots em servidores críticos e, além disso, garante a finalização dos serviços no shutdown evitando corrompimento e crashs desnecessários caso algum abençoado reinicie o SO sem parar tudo bonitinho como manda o figurino.
Siebel como serviço no Linux
Em resumo temos um ambiente de laboratório virtualizado com SO Oracle Linux 8.5, com um Siebel superior ao 22.x, com Gateway, AI, Debug Server e SES tudo no socado na mesma máquina.
Nosso Banco de dados está noutra VM, já online e open, apenas esperando nosso startup.
Antes de mais nada, tem que fazer logon no terminal do servidor, de preferência, com o mesmo usuário utilizado para a instalação do Siebel, ou seja, o owner dos diretórios e arquivos do seu /../../ses/…, /../../gw/…, /../../ai/…, etc.
Vamos precisar de alguns shell scripts para automatizar a execução de várias coisas, como o start, stop, cleanup, set de variáveis de ambientes e o que mais você tiver de atividades rotineiras que quiser deixar pronto para automatizar.
O que eu gosto de fazer e colocar todos os sheel scripts customizados num mesmo diretório, fora da estrutura de diretórios do Siebel.
Uma ideia é criar um diretório no “home” do owner logado porque fica mais fácil acessar e executar esses arquivos com um “~/diretório/script_qualquer.sh“, por exemplo.
O comando “pwd“, logo após fazer logon, por padrão, deve comprovar que você está no diretório /home/teu_usuário
Se você usar um “cd ~/script” vai direto pro teu diretório recém criado
Vou começar criando um shell script de startup dando uma enfeitada no pavão, beleza?
Abra seu editor de texto preferido do Linux ou simplesmente abra o editor que você odeia menos.
Aqui eu vou usar o “vim”, não porque eu goste, mas porque é conveniente, já vem pré instalado em praticamente qualquer setup de Oracle Linux superior ao 6.x e é menos pior que o “vi”.
Digite vim start.sh
Nesse editor de texto maaaaaaraaaaavilhooooso, você colocar os comandos básicos para iniciar o Siebel e o que mais você quiser.
Resumindo o que fizemos até aqui (que foi nada):
cd ~/
pwd
md script OU md /home/owner/script OU md ~/script
cd ~/script
vim start.sh
Meu start.sh ficou assim (com comentários):
##### INÍCIO DO start.sh ###########
# Força o interpretador de comandos
# O fato de ter um #! na frente do “/bin/bash” e isso não ser considerado um comentário sempre me atormentou
# Daí descobri o binfmt_script.c escrito por ninguém menos que o Linus Torvalds
# Se tiver com tempo sobrando, dá uma olhada nas linha 41 e 42 do script no link
# https://github.com/torvalds/linux/blob/master/fs/binfmt_script.c
#!/bin/bash
#Eu escrevo log de tudo para facilitar troubleshootings futuros, se forem necessários
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Início dos sets” >> ~/scripts/service.log 2>&1
# Faz o setting de todas as variáveis de ambiente genéricas que eu quiser.
# Mais abaixo mostro esse script
. /home/oracle/scripts/setEnv.sh
# Aqui a gente faz o setting das variáveis de ambiente necessárias para iniciar o Siebel Server
# Se não setar, vai dar ruim
. /opt/siebel/ses/siebsrvr/siebenv.sh
# Força um stop do Siebel Server caso ainda tenha algum processo travando o siebsvc (zoombie)
/opt/siebel/ses/siebsrvr/bin/./stop_server ALL
# Força o encerramento do watchdog, regss e do mwrpcss que fazem parte do Mainsoft MainWin System Core (MSC).
# O vulgo MainWin é aquela gambiarra básica que a Oracle utilizou
# para compatibilizar o aplicações feitas para Windowns com o core do Unix
# Vide Doc ID 473791.1
# Se você rodar um echo $MWHOME vai ver que a variável de ambiente está preenchida com o path certinho.
# Esse set do $MWHOME foi feito no /opt/siebel/ses/siebsrvr/siebenv.sh
$MWHOME/bin/mwadm stop
#Eu escrevo log de tudo para facilitar troubleshootings futuros, se forem necessários
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Force shutdown no Siebel Service e MW” >> ~/scripts/service.log 2>&1
####### AQUI COMEÇAM ALGUNS PASSOS OPCIONAIS #######
# Pulo do Gato! Aqui eu estou removendo o Siebel Server, ou seja,
# Removendo as referências de memória virtual do Siebel Server
opt/siebel/ses/siebsrvr/bin/./siebctl -d -S siebsrvr -i “SBL_ENTERPRISE:SBL_SERVER”
rm /opt/siebel/ses/siebsrvr/admin/*.shm
rm /opt/siebel/ses/siebsrvr/sys/osdf*
rm /opt/siebel/ses/siebsrvr/sys/svc.*
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Exclusão do Siebel Service” >> ~/scripts/service.log 2>&1
# Aproveito para apagar logs
# Se a quantidade de logs for muito grande, melhor fazer essa limpeza noutro momento
rm /opt/siebel/ai/applicationcontainer_external/logs/*.*
rm /opt/siebel/ses/applicationcontainer_internal/logs/*.*
rm /opt/siebel/gw/applicationcontainer_internal/logs/*.*
rm -rf /opt/siebel/ses/siebsrvr/enterprises/SBL_ENTERPRISE/SBL_SERVER/logarchive/
rm /opt/siebel/ses/siebsrvr/enterprises/SBL_ENTERPRISE/SBL_SERVER/log/*.*
mkdir /opt/siebel/ses/siebsrvr/enterprises/SBL_ENTERPRISE/SBL_SERVER/logarchive/
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Limpeza de logs realizada” >> ~/scripts/service.log 2>&1
# Renomeando o diccache.dat
# Para mais informações sobre o diccache.dat veja “Why is there a dicdata.dat and a diccache.dat file? (Doc ID 475633.1)” no MOS
rm /opt/siebel/ses/siebsrvr/bin/diccache_bkp*.dat
mv /opt/siebel/ses/siebsrvr/bin/diccache.dat /opt/siebel/ses/siebsrvr/bin/diccache_bkp_$(date +”%Y%m%d-%H%M%S”).dat
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Limpeza de backups antigos e criação de novo backup do diccache.dat” >> ~/scripts/service.log 2>&1
# Recriando as referências para o Siebel Server
/opt/siebel/ses/siebsrvr/bin/./siebctl -r “/opt/siebel/ses/siebsrvr” -S siebsrvr -i “SBL_ENTERPRISE:SBL_SERVER” -a -g “-g sbl_gateway_hostname:9011 -e SBL_ENTERPRISE-s SBL_SERVER -u SADMIN” -e SENHA_SADMIN
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Recriação do Siebel Service” >> ~/scripts/service.log 2>&1
# Já peguei centenas de problemas relacionados a perda de acessos do Siebel aos seus próprios diretórios
# Aqui eu garanto que, ao menos no startup do SO, todo a raiz de diretórios do Siebel tem as permissões necessárias
chown -R oracle:root /opt/siebel
chmod -R 755 /opt/siebel
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Cleanup de logs e recriação de serviço Siebel feito” >> ~/scripts/service.log 2>&1
####### AQUI TERMINAM OS PASSOS OPCIONAIS #######
# Aqui eu começo a inicializar o Siebel Gateway, Server, containers…
# Shell para inicializar o Debug Server no Linux.
# Como podem ver, deixei comentado porque uso outro server para esse propósito.
#/opt/siebel/ses/siebsrvr/bin/./startdbgsvc.sh
# O comando sleep entre uma execução e outra é para evitar gargalos de CPU
sleep 5
. /opt/siebel/gw/gtwysrvr/siebenv.sh
/opt/siebel/gw/gtwysrvr/bin/./start_ns
sleep 5
/opt/siebel/gw/applicationcontainer_internal/bin/./startup.sh
sleep 15
/opt/siebel/ses/applicationcontainer_internal/bin/./startup.sh
sleep 15
. /opt/siebel/ses/siebsrvr/siebenv.sh
/opt/siebel/ses/siebsrvr/bin/./start_server ALL
sleep 5
/opt/siebel/ai/applicationcontainer_external/bin/./startup.sh
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Start – Siebel Ligado pelo script automatizado em ~/scripts/start.sh” >> ~/scripts/service.log 2>&1
##### FIM DO start.sh ###########
O stop.sh fica bem mais clean… veja:
vim stop.sh
##### INÍCIO DO stop.sh ###########
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Stop – Stop do Siebel Inicializado” >> ~/scripts/service.log 2>&1
/opt/siebel/ai/applicationcontainer_external/bin/./shutdown.sh
. /opt/siebel/ses/siebsrvr/siebenv.sh
/opt/siebel/ses/siebsrvr/bin/./stopdbgsvc.sh
/opt/siebel/ses/siebsrvr/bin/./stop_server ALL
/opt/siebel/ses/siebsrvr/mw/bin/mwadm stop
/opt/siebel/ses/applicationcontainer_internal/bin/./shutdown.sh
/opt/siebel/gw/applicationcontainer_internal/bin/./shutdown.sh
. /opt/siebel/gw/gtwysrvr/siebenv.sh
/opt/siebel/gw/gtwysrvr/bin/./stop_ns
sleep 10
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Stop – Resultado do ps -ef|grep sieb” >> ~/scripts/service.log 2>&1
echo”****************************************************” >> ~/scripts/service.log 2>&1
# Só pra eu ter o histórico de stops com problemas, caso existam
ps -ef|grep sieb >> ~/scripts/service.log 2>&1
echo”****************************************************” >> ~/scripts/service.log 2>&1
echo $(date +”%d/%m/%Y %H:%M:%S”)” – Stop – Stop do Siebel Finalizado” >> ~/scripts/service.log 2>&1
##### FIM DO stop.sh ###########
Agora só falta o serEnv.sh onde eu faço o set de variáveis de ambiente que são ou podem ser utilizadas pelos demais scritps.
vim setEnv.sh
##### INÍCIO DO setEnv.sh ###########
ORACLE_HOME=”/opt/oracle/product/12.2.0/client_1″ ; export ORACLE_HOME
PATH=${ORACLE_HOME}/bin:/home/oracle/.local/bin:/home/oracle/bin:/usr/local/bin :/usr/bin:/usr/local/sbin:/usr/sbin:/var/lib/snapd/snap/bin ; export PATH
RESOLV_MULTI=off ; export RESOLV_MULTI
##### FIM DO setEnv.sh ###########
Todos os scripts necessários já foram criados e testados (sim, é bom que você teste se os paths estão corretos, se os “sleeps” estão adequados, se seu ambiente tem alguma particularidade, etc.)? Então é hora de criar o Siebel como serviço no Linux o que amarra a chamada dos scrips no startup e no shutdown do server.
Para isso você precisa estar conectado com root ou ter seu usuário no sudoers. Se não faz ideia do que estou falando, dá uma lida aqui.
Depois de conectar com root, você precisa criar o arquivo de serviço conforme abaixo:
vim /lib/systemd/system/siebel.service
O “siebel.service” é um nome arbitrário que eu escolhi. Poderia ser qualquer outro nome.
No conteúdo do arquivo, inserir:
#### INÍCIO DO /lib/systemd/system/siebel.service ####
[Unit]
Description=Serviço Siebel/Containers – /lib/systemd/system/siebel.service
# As diretivas abaixo precisam ser especificadas para garantir que o serviço
# só vai ser iniciado após a rede estar disponível
# Isso evita erros de conectividade com o banco de dados e outros nodes da arquitetura
Wants=network-online.target
After=syslog.target network.target
[Service]
# O systemd ignora PAM limits, então qualquer limite precisa ser setado aqui
# Mais informações em https://bugzilla.redhat.com/show_bug.cgi?id=754285
LimitMEMLOCK=infinity
LimitNOFILE=65535
RemainAfterExit=yes
# Importante colocar o usuário dono da instalação siebel. No meu caso, é o user oracle
User=oracle
# Importante colocar o grupo com acesso a instalação siebel. No meu caso, é o group root
Group=root
Restart=no
# Aqui tem que entrar o path completo do script chamado no startup do SO
ExecStart=/bin/bash -c ‘/home/oracle/scripts/start.sh’
# Aqui tem que entrar o path completo do script chamado no shutdown do SO
ExecStop=/bin/bash -c ‘/home/oracle/scripts/stop.sh’
TimeoutSec=480
[Install]
WantedBy=multi-user.target
#### FIM DO /lib/systemd/system/siebel.service ####
Se você criou o arquivo siebel.service com um usuário diferente do root, garanta que o usuário root possui acesso total ao arquivo.
chown -R root:root /lib/systemd/system/siebel.service
chmod -R 755 /lib/systemd/system/siebel.service
Pronto! Seu Siebel como serviço no Linux com Shell Scripts está criado. Só falta recarregá-lo em memória para automatizar e testar.
Para recarregar você pode reiniciar o SO ou, se quiser fazer testes unitários antes (recomendado), utilize o comando a seguir:
systemctl reload sshd.service
Os principais comandos que você vai precisar para testar se tá tudo sussa, são:
systemctl status siebel.service
systemctl disable siebel.service
systemctl enable siebel.service
systemctl unmask siebel.service
systemctl start siebel.service
systemctl stop siebel.service
systemctl restart siebel.service
Para uma lista mais completa de comandos, leia aqui.
Se tudo correu bem, assim que o SO for desligado na próxima vez, o ~/scripts/stop.sh vai ser chamado antes de finalizar. Da mesma forma, quando o SO for inicializado, após a rede estar disponível, o ~/scripts/start.sh vai que vai.
Precisa de suporte avançado e contínuo na sua operação de TI ou de serviços técnicos especializados e pontuais? Fale com a gente.