Errore logrotate nginx sul processo cron


10

Sto eseguendo Ubuntu 14.04 LTS e nginx su un Digital Ocean VPS e ogni tanto ricevo queste e-mail su un lavoro cron fallito:

Soggetto

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

Il corpo dell'email è:

/etc/cron.daily/logrotate: errore: errore durante l'esecuzione dello script postrotate condiviso per '/var/log/nginx/*.log' run-parts: /etc/cron.daily/logrotate uscito con il codice di ritorno 1

Qualche idea su come posso risolvere questo?

Aggiornare:

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

Aggiornare:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.

sembra che non possa eseguire ciò che è specificato come azione postrotate, mostraci la tua /etc/logrotate.d/nginixsceneggiatura
X Tian

/var/log/nginx/*.log {settimanale missingok ruotare 52 comprimere delaycompress notifempty creare 0640 www-data adm script condivisi prerotate se [-d /etc/logrotate.d/httpd-prerotate]; quindi \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx rotate> / dev / null 2> & 1 endscript}
Chris

1
È normale aggiornare la domanda con ulteriori informazioni quando richiesto. 4 spazi all'inizio di ogni riga lo rendono un blocco di codice.
X Tian,

Quindi, invoke-rc.d nginx rotatenon riesce, prova a eseguirlo come utente appropriato e mostraci anche quello script, incolla l'output nella tua domanda originale. tks.
X Tian,

Ho provato a eseguirlo, ho ricevuto un errore di comando non valido.
Chris,

Risposte:


10

L'azione di post rotazione sembra essere errata

Provare

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

Se guardi il nginxcomando vedrai le azioni che accetterà. Anche il messaggio che hai scritto dice checkinitctl --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.

quindi la ricarica dovrebbe funzionare e inviare il segnale HUP a nginx per forzare la riapertura dei file di log.


Grazie, quel comando sembra essere stato eseguito senza errori. Aggiornerò il cron job e andremo da lì.
Chris,

4

Come menzionato in un'altra risposta, il problema è che invoke-rc.d nginx rotaterestituisce un errore che indica che l' rotateazione non è supportata. La cosa interessante è che service nginx rotatefunziona senza problemi.

La mia ipotesi è che il invoke-rc.dwrapper non supporti tutte le azioni supportate dall'effettivo script init nginx.

Passare invoke-rc.d nginx rotatea service nginx rotatedovrebbe risolvere il problema.


3

Non sono sicuro che sia perché la initctldose non supporta l' rotateopzione, e quando è stata rimossa, ma tu non sei il solo a farlo, e ci sono segnalazioni di bug aperte per questo sul launchpad.

Come menzionato da altre risposte sopra e sotto, è possibile modificare il file nignx logrotate e sostituire la riga problmatic

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

con altre alternative che funzionano,

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`

Qualunque sia il metodo che hai scelto, ti preghiamo di non modificare un file gestito da un pacchetto e, dopo averlo modificato, non verrà più aggiornato e dovrai risolvere manualmente il diff o sovrascriverlo con un nuovo (che tutti pronti includono la correzione).


Non sono sicuro che il bug "I comandi di servizio non funzionino" si applichi qui, poiché ci sono diversi problemi risolti in ciascun bug. (Fatto curioso: ho una correzione nei lavori per il 1450770)
Thomas Ward,

1

Ha funzionato per me:
sostituito
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
con
postrotate service nginx rotate >/dev/null 2>&1


0

Sostituire:

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

Con:

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

sembra che nelle nuove versioni di Nginx funzioni. Sto eseguendo versioni 1.9.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.