Por que meu daemon do cron está sendo morto a cada alguns minutos?

3

Há cerca de uma semana, meu daemon do cron se recusa a continuar em execução. Eu estou usando o Debian 6 x64 em uma máquina virtual OpenVZ. Executar algo como pgrep cron mostra que o daemon não está em execução. Eu inicio o serviço com service cron start ou /etc/init.d/cron start e ele inicia, mas ele desaparece da lista de processos em execução depois de alguns minutos (variando entre 1 a 30 minutos antes do processo ser morto novamente).

Usando strace -f service cron start , vejo que o processo está sendo eliminado por algum motivo:

nanosleep({60, 0},  <unfinished ...>
+++ killed by SIGKILL +++

Não há nada de relevante em /var/log/syslog , /var/log/messages , /var/log/auth.log ou /var/log/kern.log para explicar por que o processo está morrendo. O sistema tem pelo menos 800 MB de memória livre e cat /proc/loadavg retorna 0.22 0.13 0.04 , portanto, os recursos não devem ser o problema. Com cron em execução, free -m relatórios:

             total       used       free     shared    buffers     cached
Mem:          1024        211        812          0          0          0
-/+ buffers/cache:        211        812
Swap:            0          0          0

Eu também tentei remover e reinstalar o pacote cron usando apt-get .

Atualização: Inicialmente, pensei que o problema fosse um problema. Eu apaguei todo o meu VPS e comecei com uma nova imagem Debian. Não há mais nada em execução no sistema, mas mesmo a partir de uma instalação limpa, meu daemon do cron ainda está sendo morto aleatoriamente.

O que mais devo verificar? Como descubro o que está matando meu crond ?

    
por user113215 29.06.2012 / 01:32

2 respostas

0

Depois de muita tentativa e erro, eu tropecei em uma solução alternativa. Por alguma razão, cron está sendo morto (presumivelmente pelo host) se estiver sendo executado no modo daemon. Se lançado com cron -f , o processo persistirá. Então, eu criei um script simples para lançá-lo em primeiro plano (e relançá-lo continuamente no caso improvável de ser morto):

#!/bin/bash -u
while [ 1 ]; do
        logger -i -t cronrestart -p cron.warn "Launching cron daemon"
        cron -f
        logger -i -t cronrestart -p cron.warn "Cron daemon killed"
done
logger -i -t cronrestart -p cron.warn "Quitting"

Então eu inicio este script de inicialização via nohup cronrestart >/dev/null & para que ele seja executado em segundo plano. Cron tem funcionado por uma semana até agora sem ser morto.

Suponho que o próximo passo seria tentar criar o script de inicialização inicie-se em segundo plano para simular melhor o modo daemon de cron .

    
por 14.07.2012 / 01:08
4

Veja /proc/user_beancounters , mais especificamente, na coluna failcnt .

Para todas as entradas diferentes de zero, você precisará aumentar o barrier / limit de acordo, provavelmente é apenas o OpenVZ eliminando seus processos para atingi-los.

Aqui está uma descrição de cada coluna: link

For accountable parameters, the field held shows the current counter for the container (resource “usage”), and the field maxheld shows the counter's maximum for the last accounting period. The accounting period is usually the lifetime of the container.

The field failcnt shows the number of refused “resource allocations” for the whole lifetime of the process group.

The barrier and limit fields are resource control settings. For some parameters, only one of them may be used, for some parameters — both. These fields may specify limits or guarantees, and the exact meaning of them is parameter-specific. Description of each parameter in UBC parameters contains information about the difference between the barrier and the limit for the parameter.

    
por 29.06.2012 / 02:25