erreur logginate nginx sur le travail cron

10

J'utilise Ubuntu 14.04 LTS et nginx sur un VPS Digital Ocean et reçois occasionnellement ces e-mails concernant un échec de cron:

Matière

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

Le corps de l'e-mail est:

/etc/cron.daily/logrotate: erreur: erreur lors de l'exécution du script postrotate partagé pour les parties d'exécution '/var/log/nginx/*.log': /etc/cron.daily/logrotate est sorti avec le code retour 1

Avez-vous des idées sur la façon de résoudre ce problème?

Mettre à jour:

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

Mettre à jour:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.
Chris
la source
il semble qu'il ne puisse pas exécuter ce qui est spécifié comme l'action postrotate, montrez-nous votre /etc/logrotate.d/nginixscript
X Tian
/var/log/nginx/*.log {hebdomadaire manquantok rotation 52 compresser delaycompress notifempty créer 0640 www-data adm sharedscripts prérotate if [-d /etc/logrotate.d/httpd-prerotate]; puis \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx rotation> / dev / null 2> & 1 endscript}
Chris
1
Il est normal de mettre à jour votre question avec de plus amples informations sur demande. 4 espaces au début de chaque ligne en font un bloc de code.
X Tian
Donc, invoke-rc.d nginx rotateéchoue, essayez de l'exécuter en tant qu'utilisateur approprié, et montrez-nous également ce script, collez la sortie dans votre question d'origine. tks.
X Tian
J'ai essayé de l'exécuter, j'ai reçu une erreur de commande non valide.
Chris

Réponses:

9

L'action de post-rotation semble incorrecte

Essayer

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

Si vous regardez la nginxcommande, vous verrez les actions qu'elle acceptera. Le message que vous avez reçu dit aussi de vérifierinitctl --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.

donc le rechargement devrait fonctionner et envoyer un signal HUP à nginx pour forcer la réouverture des fichiers journaux.

X Tian
la source
Merci, cette commande semble s’être exécutée sans erreur. Je mettrai à jour le travail cron et nous irons de là.
Chris
Il y a une faute de frappe (nginix), mais je ne peux pas éditer parce que c'est un seul changement de caractère.
Koen.
4

Comme mentionné dans une autre réponse, le problème est que invoke-rc.d nginx rotaterenvoie une erreur indiquant que l' rotateaction n'est pas prise en charge. La chose intéressante est que cela service nginx rotatefonctionne sans problèmes.

Je suppose que le invoke-rc.dwrapper ne prend pas en charge toutes les actions prises en charge par le script d'initialisation nginx réel.

Changer invoke-rc.d nginx rotatepour service nginx rotatedevrait résoudre le problème.

Robin Smidsrød
la source
3

Je ne sais pas si c'est parce que la initctldose ne prend pas en charge l' rotateoption, et quand elle a été supprimée, mais vous n'êtes pas le seul affecté par cela, et il existe un rapport de bogue ouvert pour cela sur le tableau de bord.

Comme mentionné par les autres réponses ci-dessus et ci-dessous, vous pouvez modifier le fichier nignx logrotate et remplacer la ligne problématique

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

avec d'autres alternatives qui fonctionnent,

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`

Quelle que soit la méthode que vous avez choisie, veuillez ne pas modifier un fichier géré par un package, et après l'avoir modifié, il ne sera plus mis à jour et vous devrez résoudre manuellement le diff ou l'écraser avec un nouveau (qui tous prêts incluent le correctif).

Rabin
la source
Je ne suis pas sûr que le bogue "les commandes de service ne fonctionnent pas" s'applique ici, car il y a différents problèmes résolus dans chaque bogue. (Fait amusant: j'ai un correctif en cours pour 1450770)
Thomas Ward
1

A travaillé pour moi:
remplacé
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
par
postrotate service nginx rotate >/dev/null 2>&1

Jadeye
la source
0

Remplacer:

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

Avec:

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

semble sur les nouvelles versions de Nginx cela fonctionne. J'utilise des versions 1.9.

bonitarunner
la source