Execução temporizada de programas
Publicado por Andre Miguel (última atualização em 01/09/2009)
[ Hits: 6.098 ]
Tive uma situação em que precisava rodar um programa similar ao strace do Linux num Solaris - o aplicativo truss - para coletar dados de execução de uma aplicação da empresa.
A aplicação envolve dezenas de processos simultâneos e que geram milhares de informações por segundo, sendo controlados por três processos principais. Estes processos principais não geram tantas informações por segundo como os outros, então o truss ficaria rodando interminavelmente até que eu fizesse um SIGINT ou SIGKILL.
Criei um script em BASH, mesclado com pequenos códigos AWK, para que a execução capturasse determinada quantidade de informações e terminasse, ou que terminasse após um determinado tempo, independentemente da quantidade de informações coletada.
Usei o nawk porque o gawk não tenho disponível nos servidores SUN.
################### # COMENTARIOS BASICOS # # VARIAVEIS # srv: servidor logico em execucao no servidor fisico. parametro passado via argumento $1 # .. da linha de comando # d_RES: diretorio de saida dos arquivos coletados # f_PROCS: padrao de nome de arquivo de listagem de processos para conferencia # # EXECUCAO # executa o truss (ou strace, no caso do Linux) numa subsessao do bash via '()' # #!/bin/bash timestamp=`date +%Y%m%d%H%M%S`; d_RES=/tmp/APP_truss.out; srv=$1; f_PROCS=APP--procs_$srv.$timestamp; test -z $1 && echo ".::ERR: Execucao: $0 {SERVIDOR LOGICO}" && exit 1; if [ ! -d $d_RES ]; then mkdir $d_RES || echo ".::ERR: Diretorio $d_RES nao existe e nao pode ser criado" && exit -1; elif [ ! -w $d_RES ]; then echo ".::ERR: Diretorio $d_RES nao pode ser escrito"; exit -1; fi ### # REMOVE ARQUIVOS TEMPORARIO DE INDEXACAO rm -f $d_RES/.tmp $d_RES/.pids || echo ".::ERR: Impossivel remover arquivos $d_RES/.tmp $d_RES/.pids"; for i in `/usr/ucb/ps -auxwww |grep APP |grep $srv |sort +11 |awk '{print $2}'`; do /usr/ucb/ps -auxwww |nawk -v i=$i -v d_RES_tmp=$d_RES/.tmp ' { if ($2==i){ print $0"\n"$2,$13; print $2,$13 >>d_RES_tmp; } } ' >>$d_RES/$f_PROCS; prstat -p $i 1 1 |grep -v ^$ >>$d_RES/$f_PROCS; echo >>$d_RES/$f_PROCS; done test -r $d_RES/.tmp || exit -4; cat $d_RES/.tmp |while read col1 col2; do (truss -failedD -t all -v all -x all -r all -w all -u all -p $col1 2>&1 |head -40000 >$d_RES/APP--truss_${srv}_p$col1-$col2.$timestamp.out) & echo $! >> $d_RES/.pids; done ### # TEMPORIZACAO PARA AGUARDAR TERMINO REGULAR sleep 360; ### # FAZ KILL DOS PROCESSOS RESTANTES for i in `cat $d_RES/.pids`; do ps -ef |grep -w $i |grep -v grep; done |sort -n +1 |grep -w truss |awk '{print $2}' |xargs -i kill -9 {} exit 0;
E-mails através de um servidor remoto
Mantenha seu relógio ajustado 2.0
INSTALA TAR GZ COM MENU GRÁFICO ZENITY
Script contra ataques de Brutal Force por SSH.
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalar o Microsoft Edge no Slackware 15
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Separar trafego da VPN da VPS (0)
Formatando cartão de memoria que nao formata[AJUDA] (17)
warsaw parou de funcionar após atualização do sistema (solução) (0)
Desde que seja DDR3, posso colocar qualquer memória? [RESOLVIDO] (6)