Parar a tarefa que reinicia sozinha

LinuxBeginner
Pratique Agora

Introdução

O Status Desk normalmente atualiza um pequeno cache a cada minuto. Um programa de envio desconhecido também manda solicitações sintéticas de treinamento ao coletor interno. Encerrá-lo parece ajudar, mas ele volta. Sua tarefa é remover o acionador recorrente preservando a atualização normal do status.

Basta saber usar o terminal. Status Server é um shell administrativo autorizado dentro do contêiner alvo, iniciado em /srv/status. Status Desk mostra os contadores reais do coletor. Os contêineres compartilham o kernel da instância de treinamento. Todos os dados e solicitações são inofensivos. O laboratório trata da recorrência por cron, não de uma investigação completa de um servidor de produção.

Observar o programa que volta

Nesta etapa, você encerrará um programa de envio ativo e verá por que terminar uma instância não remove a causa.

Abra Status Desk. refreshes conta solicitações bem-sucedidas de atualização do cache e deve crescer a cada minuto. uploads conta solicitações indesejadas de treinamento, normalmente uma a cada cinco segundos. O histórico permanece após a correção. Recarregue a página para obter valores atuais.

Mude para Status Server. Um processo é um programa em execução. O PID identifica aquela instância; o caminho e os argumentos descrevem sua função. ps lista processos. -e seleciona todos, e -o escolhe as colunas: PID, PID pai (PPID) e comando completo com argumentos.

ps -eo pid,ppid,args

Localize /usr/bin/python3 /opt/status/uploader.py upload. Python é o interpretador, /opt/status/uploader.py é o arquivo do programa e upload seleciona a operação de treinamento. O processo flock próximo mantém um bloqueio para cron não criar cópias simultâneas. Não altere o programa de atualização do cache.

Um sinal é uma solicitação a um processo. TERM pede um encerramento normal. O pkill abaixo seleciona a linha completa com -f; ^ e $ no padrão entre aspas delimitam o início e o fim. Assim, ele atinge esse trabalhador Python, não o pai nem seu shell. Execute uma vez:

pkill -TERM -f '^/usr/bin/python3 /opt/status/uploader.py upload$'

Nenhuma saída é normal. Se não houver correspondência, liste novamente em vez de ampliar o padrão para todos os processos Python. Aguarde um segundo para o encerramento e volte a listar:

sleep 1
ps -eo pid,ppid,args

O programa Python deve desaparecer. O checkpoint verifica que a instância original terminou, sem afirmar que o servidor está limpo.

sleep espera o número indicado de segundos. Aguarde 80 segundos para atravessar pelo menos uma mudança real de minuto e liste novamente:

sleep 80
ps -eo pid,ppid,args

O mesmo caminho e argumento upload devem voltar com outro PID. Agora a cadeia de pais inclui CRON, o iniciador de tarefas do agendador. Um PID novo significa outra execução, não outra tarefa subjacente. Se a carga atrasar o disparo, espere mais 20 segundos e liste novamente. Recarregue Status Desk: os envios retornam e as atualizações legítimas continuam. Precisamos descobrir quem inicia o programa.

Encontrar e desativar o acionador recorrente

Nesta etapa, você relacionará o processo recorrente a um agendamento específico e desativará essa entrada sem apagar tarefas legítimas.

Cron é um daemon: um serviço em segundo plano que inicia comandos agendados. Um crontab de usuário contém as tarefas de uma conta. Este terminal é root dentro do contêiner de treinamento. Portanto, crontab -l lista o agendamento dessa conta alvo, sem afetar a conta da plataforma.

crontab -l

Você deve ver:

* * * * * /usr/bin/flock -n /run/uploader.lock /usr/bin/python3 /opt/status/uploader.py upload

Os cinco primeiros campos são minuto, hora, dia do mês, mês e dia da semana. * significa qualquer valor; * * * * * executa a cada minuto. O restante é o comando. flock -n obtém um bloqueio sem esperar: se outro programa de envio já o mantém, a chamada duplicada termina. O alvo corresponde ao processo encerrado.

Agendamentos de sistema também ficam em /etc/cron.d/. ls lista arquivos e cat mostra o conteúdo de arquivos curtos. O * depois do diretório é expandido para seus arquivos.

ls /etc/cron.d
cat /etc/cron.d/*

O arquivo status-cache contém:

* * * * * root /usr/bin/python3 /opt/status/cache-refresh.py refresh

Ao contrário do crontab de usuário, o arquivo cron de sistema inclui a conta, aqui root, entre os cinco campos de tempo e o comando. Esse comando permitido atualiza Status Desk. Horários semelhantes não tornam uma tarefa não autorizada. Outras entradas de manutenção fornecidas por pacotes podem permanecer.

Para editar com segurança, primeiro copie o agendamento atual do usuário para um arquivo de trabalho. > grava a lista nesse arquivo, substituindo uma cópia anterior. Faça isso apenas uma vez antes da edição: repetir sobrescreveria seu rascunho.

crontab -l > /srv/status/root.cron

nano abre um editor de texto. Coloque # no início da linha do programa de envio. Cron ignora comentários que começam com #. Preserve o texto para recuperação e mantenha as outras entradas.

nano /srv/status/root.cron

Use as setas para ir ao início da linha, digite #, pressione Ctrl+O, Enter para salvar e Ctrl+X para sair. Instale o arquivo editado passando seu caminho a crontab:

crontab /srv/status/root.cron
crontab -l

A linha do programa deve começar com #. Cron recarrega alterações automaticamente; não é necessário reiniciar. Comentar apenas a cópia de trabalho não basta: você precisa instalá-la. Se editou a linha errada, abra o rascunho, restaure-a e instale novamente. O programa atual pode continuar ativo: remover um agendamento não termina um processo já iniciado.

Remover a cópia ativa e verificar a recuperação

Nesta etapa, você concluirá a limpeza e comparará a atividade indesejada com a função de negócio durante um intervalo completo.

Encerre o programa Python atual com o mesmo padrão exato:

pkill -TERM -f '^/usr/bin/python3 /opt/status/uploader.py upload$'

Se já estiver ausente, a saída sem correspondência é esperada e você pode continuar. Aguarde um segundo para o encerramento:

sleep 1

curl faz uma solicitação de rede. -sS oculta o progresso, mas mostra erros. Essa URL identifica o contêiner do coletor interno, acessível a partir de Status Server. /state retorna os contadores atuais e os timestamps Unix das últimas solicitações.

curl -sS http://collector:8080/state

Observe uploads, refreshes e last_refresh. Deixe então o cron real funcionar:

sleep 80
curl -sS http://collector:8080/state

uploads deve permanecer igual, enquanto refreshes e last_refresh aumentam. Recarregue Status Desk para ver os mesmos fatos. Envios antigos ficam como evidência; apagar o contador oculta o histórico, não corrige a recorrência.

Liste os processos mais uma vez:

ps -eo pid,ppid,args

cron -f permanece presente; -f mantém o daemon do contêiner em primeiro plano. O programa de envio deve continuar ausente. O checkpoint observa mais 80 segundos de forma independente; reserve cerca de 90 segundos para a avaliação. Ele apenas lê a configuração e o estado real.

Se os envios crescerem, reveja os dois locais cron e a instalação do crontab comentado. Se as atualizações pararem, restaure a entrada permitida status-cache. Nunca pare cron nem remova todos os agendamentos para esconder o sintoma: o serviço de status depende deles. Essa correção remove o mecanismo cron demonstrado; não prova que um servidor real esteja livre de todos os mecanismos possíveis de persistência.

Resumo

Você distinguiu uma instância de processo do seu iniciador, seguiu a cadeia de pais até cron, examinou agendamentos de usuário e sistema, desativou um acionador indesejado e confirmou que as atualizações de negócio continuavam durante um minuto sem novos envios.