Erro cron do CentOS 5 ao parar / iniciar um serviço no crontab

2

Qual é a melhor maneira de parar / iniciar um determinado serviço em uma agenda usando o cron?

Eu tentei executar o service servicename stop em um cron job, mas parece que não funcionou, então mudei para /etc/init.d/servicename

0 19 * * * /etc/init.d/servicename stop >/dev/null 2>&1
0 7 * * * /etc/init.d/servicename start >/dev/null 2>&1

Isso parece funcionar, não tenho certeza de como consistentemente ainda.
Mas o estranho é que eu recebo um e-mail do cron com o seguinte erro:

/bin/sh: line 1: 20178 Terminated  /etc/init.d/servicename start > /dev/null 2>&1

Parece que só recebo este erro no início do serviço. A parada parece estar bem.

Também achei que o >/dev/null 2>&1 deveria suprimir o envio de notificações por e-mail. Neste caso, ainda bem que não aconteceu.

Alguém sabe de uma maneira melhor de parar / iniciar serviços em um cronograma, esperançosamente usando o cron?
Alguém tem alguma ideia sobre o que é este erro?

Obrigado

    
por batfastad 13.08.2012 / 14:53

2 respostas

1

Sim, a melhor maneira de lidar com isso é usando um utilitário de controle de tarefas como o Monit . Ele está disponível para o CentOS e é uma maneira limpa de garantir que seus daemons estejam em execução quando necessário, e pode ser usado para iniciar / interromper grupos individuais ou de serviços em um agendamento (via cron) ... O exemplo em que vejo o cron cair através das rachaduras é quando algo acontece dentro da janela de serviço (falha do aplicativo, etc)

Veja um exemplo com o serviço de impressão do CUPS ...

Em um arquivo de configuração do Monit em algum lugar, eu teria uma sub-rotina definindo o serviço CUPS, incluindo seus comandos PID e start e stop.

check process cups
        with pidfile "/var/run/cupsd.pid"
        start program = "/sbin/service cups start"
        stop program = "/sbin/service cups stop"

executando monit status

Process 'cups'
  status                            Running
  monitoring status                 Monitored
  pid                               2357
  parent pid                        1
  uptime                            8d 6h 43m 
  .
  .     
  data collected                    Mon, 13 Aug 2012 09:07:03

A execução de monit stop cups interrompe o serviço ...

Process 'cups'
  status                            Not monitored
  monitoring status                 Not monitored
  data collected                    Mon, 13 Aug 2012 09:08:03

monit start cups inicia. Eu costumo adicionar os comandos start e stop monit no crontab para lidar com a inicialização e o desligamento do aplicativo. A Monit garantirá que o serviço também esteja em execução durante esses horários (por exemplo, após uma reinicialização no meio do dia) ...

    
por 13.08.2012 / 15:03
2

Você deve ser capaz de usar /sbin/service ... e, na verdade, é um bom hábito entrar, já que a próxima versão do RHEL / CentOS / etc provavelmente usará systemd em vez do legado /etc/init.d scripts. Se chamar /sbin/service não estiver funcionando, você pode querer dar uma olhada em qualquer saída de erro que o comando esteja gerando.

O erro Terminated que você está recebendo pode ser um script de controle de serviço cheio de bugs ... se ele fizer algo como killall servicename , pode inadvertidamente eliminar o script de controle, o que pode resultar nesse erro. Você ainda está vendo a saída de erro porque esta mensagem de erro está vindo do shell que cron inicia para executar o comando, em vez do próprio comando. Se é isso que está acontecendo aqui, você pode dar uma olhada no script de inicialização e ver se consegue resolver o problema.

Ao depurar erros, às vezes é uma boa idéia redirecionar stdout e stderr para um arquivo em vez de /dev/null (embora isso não ajude nesse caso).

    
por 13.08.2012 / 14:57