Top não mostra alguns processos dependendo do usuário

1

Eu desenvolvi um script contendo o comando top que deve ser executado por um agendador Quando eu o executo sozinho eu obtenho o resultado esperado, mas quando ele é executado pelo escalonador eu não estou obtendo o resultado esperado

A linha de código com problema é essa

ESBLOGENTRY='top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//''

Estou apenas executando o topo sem opções de comando interativas e completas (-b -n 1 -c) e depois disso aplicando um timestamp

Sysadmin da maquina, executei o comando fazendo su para root e até mesmo meu mesmo usuário, e as vezes o processo simplesmente desaparece (ESBLOGENTRY fica vazia)

O usuário usado pelo agendador nunca recebe uma saída.

Alguma idéia do que poderia estar errado com isso?

    
por Danilo Araya 06.09.2016 / 20:11

1 resposta

1

O comando

ESBLOGENTRY='top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//''

assume que a saída de top incluirá pelo menos essas duas sequências:

DataFlowEngine ACES_KOFAX_TCM_DRS

que tem 34 caracteres. Em uma verificação rápida, top está me mostrando o comando começando na coluna 64. Mas top está me mostrando apenas linhas de até 80 colunas. Se o seu ambiente definir $COLUMNS como um valor mais amplo, top provavelmente usará esse valor (e, em uma verificação rápida, é o que acontece com o Debian 7). A top página de manual diz que, se você usar um -w opção, será padronizado para 512 colunas, mas não diz nada sobre a largura padrão sem a opção.

Quando as linhas são encurtadas, o grep para ACES_KOFAX_TCM_DRS falha, fazendo com que o script retorne uma string vazia. Se você usa uma opção -w , seu script deve funcionar de forma mais consistente.

Como alternativa, altere o comando para

ESBLOGENTRY='COLUMNS=128 top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//''

definiria o ambiente para top (sem interferir em outros programas).

    
por 06.09.2016 / 22:39