Acho que bombardeei meu servidor com um cron job - o que está acontecendo aqui e como eu me recupero?

3

Eu agendei um script Python simples para ser executado a cada minuto sob o usuário foo

SHELL=/bin/bash
BASH_ENV=/home/foo/.bash_profile

* * * * * python /home/foo/slack-bot/main.py 2>&1 /home/foo/slack-bot.log

Depois de alguns minutos, recebi esses erros e logo depois fui expulso do meu servidor

-bash: fork: Cannot allocate memory
-bash: wait_for: No record of process 32012
-bash: fork: Cannot allocate memory
-bash: wait_for: No record of process 32012
....

Uh oh. Então, tentei fazer login como root e sudo-ing como foo

sudo -iu foo
sudo: unable to execute /bin/bash: Cannot allocate memory

Ótimo.

Em seguida, removi a linha ofensiva do arquivo crontab do usuário foo e também matei todos os processos com slack no nome

kill $(ps aux | grep 'slack' | awk '{print $2}')

Agora recebo um erro diferente, mas ainda não consigo usar esse usuário:

sudo -iu foo
-bash: xmalloc: .././copy_cmd.c:86: cannot allocate 32 bytes (450560 bytes allocated)

O que está acontecendo aqui? Tenho certeza de que há um erro em minha programação cronológica que investigarei, mas que tipo de comportamento causa os erros de bifurcação de falta de memória? Qual é a melhor maneira de recuperar além de um hard-reset?

Obrigado!

    
por user2490003 21.12.2016 / 03:29

1 resposta

1

É um padrão de lançamento comum - depende do que você precisa ... você pode

  • aumenta o tempo entre o lançamento do processo para aumentar a probabilidade anterior ao término
  • identificar se o lançamento anterior ainda está em execução, se assim terminar
  • crie um daemon de longa execução em vez de um processo de execução curto
  • lançamento - conclua o trabalho e termine - faça com que um processo de observador inicie o novo lançamento apenas quando ele descobrir que ele não está sendo executado (a la supervisord)

sem conhecer o caso de uso, é difícil prosseguir

    
por Scott Stensland 21.12.2016 / 04:36