Nginx-Logrotate-Fehler beim Cron-Job

10

Ich verwende Ubuntu 14.04 LTS und Nginx auf einem Digital Ocean VPS und erhalte gelegentlich folgende E-Mails über einen fehlgeschlagenen Cron-Job:

Gegenstand

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

Der Text der E-Mail lautet:

/etc/cron.daily/logrotate: Fehler: Fehler beim Ausführen des freigegebenen Postrotate-Skripts für die Laufteile '/var/log/nginx/*.log': /etc/cron.daily/logrotate wurde mit Rückkehrcode 1 beendet

Irgendwelche Gedanken darüber, wie ich das lösen kann?

Aktualisieren:

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

Aktualisieren:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.
Chris
quelle
Es sieht so aus, als ob es nicht ausgeführt werden kann, was als Postrotate-Aktion angegeben ist. Zeigen Sie uns Ihr /etc/logrotate.d/nginixSkript
X Tian
/var/log/nginx/ *. dann \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ Endscript postrotate invoke-rc.d nginx drehen> / dev / null 2> & 1 Endscript}
Chris
1
Es ist normal, Ihre Frage auf Anfrage mit weiteren Informationen zu aktualisieren. 4 Leerzeichen am Anfang jeder Zeile machen es zu einem Codeblock.
X Tian
Wenn dies invoke-rc.d nginx rotatefehlschlägt, versuchen Sie, dies als den entsprechenden Benutzer auszuführen, und zeigen Sie uns auch dieses Skript. Fügen Sie die Ausgabe in Ihre ursprüngliche Frage ein. tks.
X Tian
Versucht es auszuführen, erhielt einen ungültigen Befehlsfehler.
Chris

Antworten:

9

Die Aktion nach dem Drehen scheint falsch zu sein

Versuchen

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

Wenn Sie sich den nginxBefehl ansehen , sehen Sie die Aktionen, die er akzeptiert. Auch die Nachricht, die Sie erhalten haben, sagt überprüfeninitctl --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.

Daher sollte das Neuladen funktionieren und das HUP-Signal an nginx senden, um das erneute Öffnen von Protokolldateien zu erzwingen.

X Tian
quelle
Vielen Dank, dieser Befehl scheint fehlerfrei ausgeführt worden zu sein. Ich werde den Cron-Job aktualisieren und von dort aus fortfahren.
Chris
Es gibt einen Tippfehler (Nginix), aber ich kann ihn nicht bearbeiten, da es sich um eine einzelne Zeichenänderung handelt.
Koen.
4

Wie in einer anderen Antwort erwähnt, besteht das Problem darin, dass invoke-rc.d nginx rotateein Fehler zurückgegeben wird, der besagt, dass die rotateAktion nicht unterstützt wird. Das Interessante ist, dass es service nginx rotateohne Probleme funktioniert.

Ich vermute, dass der invoke-rc.dWrapper nicht alle Aktionen unterstützt, die das eigentliche Nginx-Init-Skript unterstützt.

Ein Wechsel invoke-rc.d nginx rotatezu service nginx rotatesollte das Problem lösen.

Robin Smidsrød
quelle
3

Ich bin nicht sicher, ob es, weil initctlDosis die rotateOption nicht unterstützt , und wann es entfernt wurde, aber Sie sind nicht der einzige, der davon betroffen ist, und es gibt einen offenen Fehlerbericht dafür auf dem Launchpad.

Wie in anderen Antworten oben und unten erwähnt, können Sie die Nignx-Logrotate-Datei bearbeiten und die problematische Zeile ersetzen

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

mit anderen Alternativen, die funktionieren,

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`

Welche Methode Sie auch gewählt haben, bitte nicht, dass Sie eine Datei ändern, die von einem Paket verwaltet wird. Nachdem Sie sie geändert haben, wird sie nicht mehr aktualisiert und Sie müssen das Diff manuell auflösen oder mit a überschreiben neue (die alle bereit sind, enthalten das Update).

Rabin
quelle
Ich bin nicht sicher, ob der Fehler "Servicebefehle funktionieren nicht" hier zutrifft, da in jedem Fehler unterschiedliche Probleme behoben werden. (Lustige Tatsache: Ich habe eine Lösung für 1450770 in Arbeit)
Thomas Ward
1

Arbeitete für mich:
Ersetzte
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
Mit
postrotate service nginx rotate >/dev/null 2>&1

Jadeye
quelle
0

Ersetzen:

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

Mit:

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

Auf neueren Versionen von Nginx scheint dies zu funktionieren. Ich verwende 1.9-Versionen.

Bonitarunner
quelle