Portanto, o problema para o qual quero encontrar uma solução organizada é que, quando faço login em um servidor (tenho algumas instâncias do Solaris e do RHEL), tento descobrir quais aplicativos estão em execução:
$ ps -auxww | grep <thing I look for, usually Java>
E recebo uma bela lista de processos, PIDs, detalhes extras e com todo o nome do processo e parâmetros que foram executados com ele. Enquanto issogeralmentefornece informações suficientes para eu descobrir o que está sendo executado, alguns servidores são executados de maneira diferente. Posso ter um servidor que possui várias instâncias de um servidor de aplicativos usado para finalidades diferentes. Outros processos são remanescentes de um processo suspenso que misturei comnão congeladoprocessos. Não quero encerrar todas as instâncias Java porque não consigo descobrir qual processo precisa ser eliminado.
A solução que gostaria de fornecer é durante meus scripts de inicialização, gostaria de acrescentar ou acrescentar a um processo algum texto que me permita inserir uma breve descrição. Existe algo que possa me permitir fazer isso?
Se o que estou perguntando parece impossível/bobo/completamente absurdo, estou aberto a soluções alternativas que me dêem alguma capacidade de realizar a mesma coisa. Estou aberto a ideias, mas esta apareceu como factível.
Responder1
Aqui está um exemplo degravidadesugestão:
$ MARKER=snooze sleep 120&
$ ps ew | grep -o ".*[M]ARKER=snooze"
11741 pts/2 S 0:00 sleep 120 MARKER=snooze
A e
opção faz ps
imprimir o ambiente do processo. A -o
opção e o regex cortam grep
qualquer ambiente após a parte que procuramos, mas eu não apostaria que sempre teria resultados tão limpos (mais ambiente pode ser impresso). Colocar parte do padrão entre colchetes executa a função que as pessoas costumam usar em um grep -v
for - eliminar o grep
próprio dos resultados.
Responder2
Parece que você deseja marcar cada processo de maneira exclusiva para poder descobri-lo facilmente. Na verdade, ouvi falar que isso foi feito em uma grande empresa por sua equipe de monitoramento - cada aplicativo tinha um código exclusivo que poderia ser facilmente encontrado com ps e grep.
Em java você pode usar -D para definir qualquer variável, então você pode facilmente adicionar algo como "-Dmonitoringid=". O processo iria ignorá-lo, mas você pode facilmente fazer isso.
Como alternativa, você pode dividir seus servidores de aplicativos para que cada um seja executado sob um ID específico do aplicativo que está sendo servido. Atualmente, executamos um grande farm de servidores de aplicativos J2EE, com muitos aplicativos em cada caixa, no entanto, cada um é executado com seu próprio ID para dividir propriedade, acesso, controles, etc.
Isso também significa que encontrar qualquer servidor de aplicativo em um host é tão simples quanto:
ps <whichever ps args you like best> | grep java | grep <uid> | grep -v grep