erro de logginate do nginx no trabalho cron

10

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

Sujeito

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

O corpo do email é:

/etc/cron.daily/logrotate: erro: erro ao executar o script postrotate compartilhado para as partes de execução '/var/log/nginx/*.log': partes de execução: /etc/cron.daily/logrotate encerradas com o código de retorno 1

Alguma idéia de como posso resolver isso?

Atualizar:

/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 
}

Atualizar:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.
Chris
fonte
parece que ele não pode executar o que está especificado como a ação postrotate, mostra-nos o seu /etc/logrotate.d/nginixroteiro
X Tian
/var/log/nginx/*. então \ run-parts /etc/logrotate.d/httpd-prerotate; \ Fi \ EndScript postrotate invoke-rc.d nginx rotate> / dev / null 2> & 1 EndScript}
Chris
1
É normal atualizar sua pergunta com mais informações, quando solicitado. 4 espaços no início de cada linha o tornam um bloco de código.
X Tian
Portanto, invoke-rc.d nginx rotateestá falhando, tente executar isso como o usuário apropriado e mostre esse script também, cole a saída na sua pergunta original. tks.
X Tian
Tentei executá-lo, recebeu um erro de comando inválido.
Chris

Respostas:

9

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

Experimentar

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

Se você olhar para o nginxcomando, verá as ações que ele aceitará. Também a mensagem que você recebe diz chequeinitctl --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, recarregar deve funcionar e enviar o sinal HUP para o nginx para forçar a reabertura dos arquivos de log.

X Tian
fonte
Obrigado, esse comando parece ter sido executado sem erro. Vou atualizar o trabalho cron e vamos a partir daí.
Chris
Há um erro de digitação (nginix), mas não consigo editar porque é uma única alteração de char.
Koen.
4

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

Meu palpite é que o invoke-rc.dwrapper não suporta todas as ações que o script init real do nginx suporta.

Mudar invoke-rc.d nginx rotatepara service nginx rotatedeve resolver o problema.

Robin Smidsrød
fonte
3

Não tenho certeza se porque a initctldose não suporta a rotateopção e quando ela foi removida, mas você não é o único afetado por isso, e há um relatório de erro aberto para isso na barra de ativação.

Como mencionado por outras respostas acima e 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 funcionam,

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`

Seja qual for o método escolhido, não altere um arquivo gerenciado por um pacote e, após a alteração, ele não será mais atualizado e você terá que resolver manualmente o diff ou substituí-lo por um novo (todos prontos incluem a correção).

Rabin
fonte
Não sei se o erro "comandos de serviço não funciona" se aplica aqui, pois há diferentes problemas abordados em cada bug. (Curiosidade: Eu tenho uma correção nas obras para 1.450.770)
Thomas Ward
1

Trabalhou para mim:
Substituído
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
Com
postrotate service nginx rotate >/dev/null 2>&1

Jadeye
fonte
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 que nas versões mais recentes do Nginx isso funciona. Estou executando a versão 1.9.

bonitarunner
fonte