erro nginx logrotate no trabalho cron

10

Estou executando o Ubuntu 14.04 LTS e o nginx em um Digital Ocean VPS e, ocasionalmente, recebo esses e-mails sobre um trabalho do cron com falha:

Assunto

Cron test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

O corpo do email é:

/etc/cron.daily/logrotate: error: error running shared postrotate script for '/var/log/nginx/*.log ' run-parts: /etc/cron.daily/logrotate exited with return code 1

Alguma ideia de como posso resolver isso?

Atualização:

/var/log/nginx/*.log {
  weekly
  missingok 
  rotate 52 
  compress 
  delaycompress
  notifempty 
  create 0640 www-data adm
  sharedscripts
  prerotate
      if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
          run-parts /etc/logrotate.d/httpd-prerotate; \
      fi
  endscript 
  postrotate 
      invoke-rc.d nginx rotate >/dev/null 2>&1
  endscript 
}

Atualização:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try 'initctl --help' for more information.
    
por Chris 14.06.2015 / 17:46

5 respostas

9

A ação de pós-rotação parece estar incorreta

Tente

invoke-rc.d nginx reload >/dev/null 2>&1

Se você olhar o comando nginx , verá as ações que ele aceitará. Também a mensagem que você recebeu diz verificar initctl --help

xtian@fujiu1404:~/tmp$ initctl help
Job commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

, portanto, o recarregamento deve funcionar e enviar o sinal HUP ao nginx para forçar a reabertura de arquivos de registro.

    
por 16.06.2015 / 03:06
4

Como mencionado em outra resposta, o problema é que invoke-rc.d nginx rotate retorna um erro informando que a ação rotate não é suportada. O interessante é que service nginx rotate funciona sem problemas.

Meu palpite é que o wrapper invoke-rc.d não suporta todas as ações que o script init nginx atual suporta.

A alteração de invoke-rc.d nginx rotate para service nginx rotate deve resolver o problema.

    
por 01.09.2015 / 11:09
3

Não tenho certeza se porque initctl dose não suporta a opção rotate e quando foi removida, mas você não é o único afetado por isso, e há um relatório de bug aberto para isso na barra de lançamento .

Como mencionado por outras respostas acima, abaixo, você pode editar o arquivo nignx logrotate e substituir a linha problemática

invoke-rc.d nginx reload >/dev/null 2>&1

com outras alternativas que funcionem,

start-stop-daemon --stop --signal USR1 --quiet --pidfile /run/nginx.pid --name nginx
# or 
service nginx rotate >/dev/null 2>&1
# or
[ -f /var/run/nginx.pid ] && kill -USR1 'cat /var/run/nginx.pid'

Qual método você escolheu, por favor, não que você esteja alterando um arquivo que é gerenciado por um pacote, e depois de alterá-lo, ele não será mais atualizado e você terá que resolver manualmente o diff ou sobrescrever com um novo (que tudo pronto inclui a correção).

    
por 17.05.2016 / 08:58
1

Trabalhou para mim:
Substituído por postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
Com postrotate service nginx rotate >/dev/null 2>&1
Espero que isso ajude alguém em algum lugar ....

    
por 10.03.2016 / 21:42
0

Substituir:

invoke-rc.d nginx reload >/dev/null 2>&1

Com:

[ ! -f /var/run/nginx.pid ] || kill -USR1 'cat /var/run/nginx.pid'

parece em versões mais recentes do Nginx isso funciona. Estou executando versões 1.9.

    
por 09.11.2015 / 15:06