Pourquoi mon Centrot logrotate fonctionne-t-il à des moments aléatoires?

10

J'ai mis un logrotatefichier de configuration /etc/logrotate.d/et je m'attendais à ce que les journaux tournent à un moment cohérent; cependant, ils ne le font pas ... les temps de rotation des journaux sont apparemment aléatoires de +/- une heure.

Pourquoi les heures de début de rotation des journaux sont-elles aléatoires et comment puis-je changer cela?


Informatif: mon fichier de configuration logrotate ressemble à ceci ...

/opt/backups/network/*.conf {
        copytruncate
        rotate 30
        daily
        create 644 root root
        dateext
        maxage 30
        missingok
        notifempty
        compress
        delaycompress
        postrotate
            ## Create symbolic links in daily/
            PATH=`/usr/bin/dirname $1`;
            FILE=`/bin/basename $1`;
            /bin/ln -s $1 $PATH/daily/$FILE
        endscript
}
Mike Pennington
la source

Réponses:

10

La clé est de savoir que CentOS exécute les scripts dans /etc/cron.{daily,weekly,monthly} à partir de anacron... /etc/anacrontabest défini RANDOM_DELAY, ce qui fait ce que vous attendez (il retarde jusqu'à RANDOM_DELAYquelques minutes avant de commencer le travail) ...

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

Réglage RANDOM_DELAY=0/ START_HOURS_RANGE=3correction du problème ...

ÉDITER

Après réflexion, je vais supprimer anacronet installer la vixie normale cron...

Mike Pennington
la source
N'oubliez pas que si votre serveur est éteint pour une raison quelconque quand anacron est censé s'exécuter, il s'exécutera quelque temps après le démarrage du système. Ainsi, vous pouvez toujours obtenir des rotations de journaux à des moments différents. Ce n'est probablement pas un gros problème, mais il convient de le noter.
AngerClown
La définition de START_HOURS_RANGE sur une valeur unique (= 3) ne fonctionnera pas, car cette variable attend la plage, pas le nombre unique. Il devrait donc être 3-4 dans l'exemple ci-dessus.
Slavik
6

Pas la réponse, mais j'ai récemment essayé de comprendre cela pour une autre raison et je n'ai trouvé aucune documentation sur la façon dont Redhat 6, Centos, etc. exécutent cron. Voici ce que j'ai inversé l'ingénierie:

  1. crond fonctionne toujours au démarrage du système - il charge tous les fichiers dans /etc/cron.d
  2. /etc/cron.d/0hourly exécute tous les fichiers dans /etc/cron.hourly
  3. /etc/cron.hourly/0anacron court anacron
  4. charges d'anacron /etc/anacrontab
  5. /etc/anacrontabs'exécute (via run-parts) /etc/cron.daily, /etc/cron.weeklyet/etc/cron.monthly

C'est donc plus compliqué que dans les versions précédentes.

Il est possible de restaurer l'ancien comportement en ajoutant les entrées horaires, hebdomadaires et mensuelles dans /etc/crontab(qui est maintenant vide), mais anacrontabdevra également être mis à jour. Cela peut ou non interrompre les futures mises à jour ...

AngerClown
la source
4

D'autres réponses couvrent comment mais pas nécessairement pourquoi . La raison est d'empêcher les tâches cron simultanées de tuer votre infrastructure. (Imaginez un stockage partagé, ou peut-être 1000 serveurs exécutés sur un hôte VM, ou simplement des tâches nocturnes qui touchent un service en réseau.)

Je résout toujours ce problème pour la rotation des journaux en particulier sur mes systèmes en déplaçant le travail de rotation des journaux spécifique cron.dailyd'une entrée avec une heure codée en dur cron.d. De cette façon, vous obtenez toujours des exécutions échelonnées pour des services comme updatedb où le temps n'est vraiment pas essentiel, mais des temps cohérents pour la rotation des journaux.

Bien sûr, lorsque vous atteignez une certaine taille, vous voudrez de toute façon que tous vos journaux soient envoyés de l'hôte à un serveur de journaux, puis le temps de rotation des fichiers sur les nœuds individuels est moins important, car ceux-ci ne sont là que pour commodité (généralement après la fin du fichier) ou en dernier recours. Ensuite, vous définiriez définitivement la rotation sur votre serveur de journaux pour qu'elle soit systématique.

mattdm
la source