logrotate ne fera pas tourner automatiquement mes journaux

8

J'ai deux boîtes Debian différentes (i386 v AMD) et j'ai le même problème. logrotate ne fera pas tourner automatiquement mes journaux. Cela fonctionne bien quand je le force manuellement comme

/usr/sbin/logrotate -f /etc/logrotate.conf

mais ça ne me va pas.

Les paramètres n'ont pas été modifiés (au moins, je ne les ai pas modifiés), la boîte AMD est une nouvelle installation mais ne fera pas son travail.

Si vous avez remarqué un problème similaire, veuillez m'aider.

Mise à jour (sortie de certains serveurs):

logrotate -d http://pastebin.com/e6AshtGq

ls -l /var/log http://pastebin.com/Y2A4Li59

cat /etc/logrotate.conf http://pastebin.com/1h7Uwctr

ls -l /etc/logrotate.d http://pastebin.com/NvUAeszM

fabrik
la source
Avez-vous une erreur? Vérifiez que «include /etc/logrotate.d» n'est pas commenté.
Torian
1
Comment savez-vous que cela ne fera pas tourner vos journaux? Les erreurs? Ne se passe-t-il pas après 30 jours? Ces boîtes sont-elles toujours en place? Logrotate est-il prévu dans cron?
EightBitTony
Je peux vérifier que "include /etc/logrotate.d" est en place dans les deux systèmes. Aucune erreur, sauf une entrée intéressante dans syslog, comme si je ...rsyslogd was HUPed...ne suis pas sûr que cela signifie quelque chose.
fabrik
@EightBitTony Ce sont des serveurs, ils sont donc opérationnels en permanence. Les paramètres sont plus ou moins les valeurs par défaut (la configuration logrotate n'a pas été modifiée par moi), seuls les éléments habituels sont installés. logrotate est inclus dans cron.dailymais la rotation ne se produira pas.
fabrik
@Fabrik veuillez ajouter la sortie logrotate -d /etc/logrotate.conf à la question
EightBitTony

Réponses:

8

Vérifiez que votre logrotate est exécuté par cron.

Éditer:

De la discussion des commentaires - il semble que cron ne fonctionne pas correctement. J'ai eu un cronjob dans mon crontab sans utilisateur mais cela ne s'est révélé que lorsque j'ai redémarré le démon cron

Mes systèmes ubuntu et centos ont un /etc/cron.daily/logrotatefichier dont le contenu est

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Mon / etc / crontab a la ligne suivante pour exécuter les tâches quotidiennes

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily 
Iain
la source
Cela ressemble totalement à ma configuration, sauf que la mienne ne fonctionne pas :(
fabrik
Cron Running vérifie-t-il la sortie de ps -ef | grep cron| grep -v grep? Ajoutez un écho au début de /etc/cron.daily/logrotate echo "logrotate runing" >>/tmp/logrotate.outet voyez s'il est créé.
user9517
On dirait qu'il y a eu un problème avec ma crontab. cronest opérationnel mais n'exécutera pas le travail journalier de rotation. Si je lance /etc/cron.daily/logrotatemanuellement, cela fait tourner mes journaux, /tmp/logrotate.outégalement écrits.
fabrik
N'oubliez pas que le travail quotidien ne recommencera que demain!
user9517
bien sûr, mais hier j'ai modifié /etc/cron.daily/logrotatedonc j'ai ajouté un -fparamètre pour forcer la rotation encore aujourd'hui matin mes journaux n'ont pas tourné.
fabrik
10

J'ai eu un problème similaire mais crontabfonctionnait et pour certains des répertoires de journaux, logrotatemais pour certains, cela n'a pas fonctionné. Lorsque j'ai essayé d'exécuter le logrotate manuellement, j'ai reçu des messages d'erreur.

user@server:/var/log/apache2$ sudo /usr/sbin/logrotate -f /etc/logrotate.conf
error: error creating output file /var/log/apache2/access.log.1.gz: File exists
error: error creating output file /var/log/apache2/error.log.1.gz: File exists
...

Tous les *.1.gzfichiers avaient une taille de 0. J'ai supprimé manuellement tous les fichiers mentionnés dans le message d'erreur, j'ai exécuté à sudo /usr/sbin/logrotate -f /etc/logrotate.confnouveau et cela a fonctionné.

Je pensais juste que je devrais partager cette solution alternative ici aussi, car c'était le premier résultat de recherche qui m'est venu lorsque je cherchais le problème, mais la solution suggérée n'a pas fonctionné pour moi. Peut-être que cela aide aussi ceux qui sont dans la même situation que moi.

Grenouille23
la source
merci, avait aussi ce problème. Supprimé tous les fichiers 1.gz et il a finalement repris son travail. quel horrible morceau de code.
Florian Heigl
2

Je sais je sais. Fil de 5 ans.

Je pense que si cela revient assez haut dans les recherches, je contribuerai et donnerai ma solution au problème que j'ai rencontré. Mes tâches logrotate n'ont pas été gérées automatiquement sur l'un de mes serveurs. Forcer la rotation a bien fonctionné. J'ai trouvé une solution après avoir exécuté manuellement la commande de rotation quotidienne:

( cd / && run-parts --report /etc/cron.daily )

Ensuite, j'ai vu l'erreur qui empêchait les jobs logrorate de s'exécuter:

/etc/cron.daily/logrotate:
error: iptraf-ng:2 duplicate log entry for /var/log/iptraf/*.log

Oui, aussi simple que ça. J'avais deux fichiers définissant les mêmes journaux à faire pivoter (iptraf et iptraf-ng). Il suffit de supprimer l'une des définitions de logrotate en conflit pour iptraf.

rm /etc/logrotate.d/iptraf

Un autre problème pourrait être un fichier / etc / crontab bâclé. Ce qui signifie double ou triple vérifier la syntaxe sur ce fichier car il ne fournit aucune sortie, je pourrais trouver si la syntaxe est incorrecte. Quitte silencieusement après l'échec de la validation de la syntaxe.

J'espère que cela fait gagner du temps à quelqu'un.

Petit sourire satisfait
la source
1

OK, j'ai eu un problème similaire.

"les journaux ne tournent pas?" mais en exécutant logrotate manuellement (ou en exécutant le /etc/cron.dailyet cela les fait tourner très bien.

Il semble donc que cron "ne fonctionne pas" quotidiennement. Impair. J'ai donc regardé dans le fichier journal où cron sort ses données et j'ai vu "le jeton d'authentification n'est plus valide; un nouveau requis" pour corriger ce problème particulier, voir ici

rogerdpack
la source
1

J'ai vu cela se produire souvent au fil du temps à mesure que les services changent et que les options utilisées dans logrotate ont été supprimées, ce qui entraîne l'échec de logrotate chaque jour.

Pour vous donner une idée, le dernier correctif impliquait que l' option notifyempty dans le fichier logrotate d'apache n'était plus valide, entraînant à son tour l'arrêt complet de logrotate.

Bien que cela ait été couvert jusqu'à un certain point, je voudrais partager le processus que je traverse lors du suivi de ces problèmes:

  1. commencez par exécuter #/usr/sbin/logrotate -f /etc/logrotate.confpour rechercher les erreurs (par exemple postfix: 3 'missingok'.) Le numéro de fichier et de ligne auquel
    il se réfère est le fichier dans le dossier logrotate.d.
  2. Modifiez le fichier en question # vi /etc/logrotate.d/postfix:, supprimez l'option à l'origine du problème et enregistrez le fichier.
  3. Répétez la première étape pour voir si la rotation fonctionne ou s'il y a d'autres problèmes.

Il y a des moments où la première étape ne produit rien, mais vous savez qu'il y a un problème. Étant donné que tout cela a commencé parce que les fichiers journaux d'un service n'étaient pas en rotation, vous pouvez regarder le processus logrotate à la recherche de ce service spécifique pour voir ce qui l'empêche de tourner. Pour ce faire, ajoutez la balise verbose à votre commande logrotate et regardez pour voir ce qui se passe dans ce dossier (le cas échéant).

DBrown
la source
1

Vérifiez les paramètres de configuration de logrotation en conflit !!

J'avais du mal avec ce problème et j'ai finalement lu de très près une documentation sur logrotate, j'ai trouvé une documentation utile ici .

J'avais spécifié à la fois un paramètre Taille et un paramètre Intervalle de rotation , alors qu'en fait je ne voulais ni l'un ni l'autre. Je voulais que mes rotations se produisent exactement au moment où elles étaient programmées dans cron.

  1. Le paramètre de taille remplacera tout intervalle de rotation. Mes journaux devaient donc dépasser ce paramètre avant de pouvoir être tournés. (Je peux voir à quel point cela serait utile lorsque vous vous inquiétiez le plus de l'utilisation du disque. Mais ce n'est pas comme ça que je voulais l'utiliser.)
  2. L'intervalle de rotation vérifiera quand la dernière rotation a eu lieu et s'assurera que la rotation suivante est retardée de la quantité spécifiée. Mais, je ne sais pas comment vous contrôlez quand ce moment se produit, il est basé sur la dernière fois qu'une rotation s'est produite.

Alors, débarrassez-vous du paramètre Intervalle de rotation et taille . Ensuite, vous obtiendrez une rotation à chaque appel de logrotate sans avoir à la forcer.

EDIT : OK même cela ne fonctionne pas entièrement! Si le fichier journal est inférieur à un certain seuil, les journaux ne tournent pas. Donc, quand j'ai exécuté un travail cron qui tournait toutes les 2 minutes, il n'a pas fait tourner les journaux.

Vous pouvez voir des informations de débogage détaillées si vous exécutez logrotate -d. Cela fournit des informations de débogage très utiles.

BruceJo
la source