Oracle
 sql >> Base de données >  >> RDS >> Oracle

Logrotate pour nettoyer les fichiers horodatés

Logrotate supprime les fichiers en fonction de l'ordre dans la liste triée lexicalement des noms de fichiers journaux pivotés, ainsi que par âge du fichier (en utilisant l'heure de la dernière modification du fichier)

  • tourner est le nombre maximal de fichiers pivotés, vous pouvez trouver. S'il y a un plus grand nombre de fichiers journaux en rotation, leurs noms sont triés lexicalement et les plus petits sont supprimés.

  • maxi définit un autre critère pour la suppression des fichiers journaux en rotation. Tout fichier journal ayant fait l'objet d'une rotation, étant plus ancien que le nombre de jours indiqué, est supprimé. Notez que la date est détectée à partir de l'heure de la dernière modification du fichier, et non à partir du nom du fichier.

  • format de date permet un formatage spécifique pour la date dans les fichiers pivotés. La page de manuel note que le format doit entraîner un tri lexicalement correct .

  • datehier permet d'utiliser des dates dans les noms de fichiers journaux un jour en arrière.

Pour conserver un nombre donné de jours dans les fichiers en rotation quotidienne (par exemple 7), vous devez définir rotate à la valeur 7 et vous pouvez ignorer maxage , si vos fichiers sont créés et pivotés vraiment tous les jours.

Si la création de journal ne se produit pas pendant quelques jours, a.g. pendant 14 jours, le nombre de fichiers journaux en rotation sera toujours le même (7).

maxage améliorera la situation dans les scénarios "journaux non produits" en supprimant toujours les fichiers trop anciens. Après 7 jours sans production de journaux, il n'y aura plus de fichiers journaux en rotation.

Vous ne pouvez pas utiliser dateformat comme le montre OP, car il n'est pas triable lexicalement. Gâcher avec dateformat entraînerait probablement la suppression d'autres fichiers journaux en rotation que vous ne le souhaitiez vraiment.

Astuce :Exécutez logrotate depuis la ligne de commande avec -d option pour effectuer un essai à blanc :vous verrez ce que logrotate ferait mais ne fait rien en réalité. Effectuez ensuite une exécution manuelle en utilisant -v (verbeux) afin que vous puissiez confirmer que ce qui est fait est ce que vous voulez.

Solution :nettoyer les journaux créés par cron

Le concept est :

Laissez cron créer et mettre à jour les fichiers journaux, mais faites de petites modifications pour créer des fichiers, en suivant les noms de fichiers standard logrotate lors de l'utilisation par défaut de dateext

/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

Utilisez logrotate uniquement pour supprimer les fichiers journaux trop anciens

  • viser un fichier journal non existant /data/tier2/scripts/logs/recover_standby_SID.log
  • utiliser missingok pour laisser le nettoyage logrotate se produire
  • définir rotate assez élevé, pour couvrir le nombre de fichiers journaux à conserver (au moins 7, s'il y aura un fichier journal "tourné" par jour, mais vous pouvez en toute sécurité le définir très haut comme 9999)
  • définir maxage à 7. Cela supprimera les fichiers dont l'heure de dernière modification est supérieure à 7 jours.
  • dateext est utilisé uniquement pour s'assurer que logrotate recherche les fichiers plus anciens ressemblant à une rotation.

Le fichier de configuration de Logrotate ressemblerait à :

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

Solution :tourner directement par logrotate une fois par jour

Je ne sais pas comment le fichier de secours de récupération source est créé, mais je suppose qu'Oracle ou un de vos scripts ajoute régulièrement ou continuellement à un fichier /data/tier2/scripts/logs/recover_standby_SID.log

Le concept est :

  • faire pivoter le fichier une fois par jour par logrotate
  • travailler directement avec le fichier journal contenant les données de récupération /data/tier2/scripts/logs/recover_standby_SID.log
  • daily provoquera une rotation une fois par jour (en termes de façon dont cron comprend daily )
  • rotate doit être défini sur 7 (ou tout nombre supérieur).
  • maxage défini sur 7 (jours)
  • dateext pour utiliser le suffixe de date logrotate par défaut
  • dateyesterday utilisé pour faire en sorte que les suffixes de date dans les fichiers pivotés remontent d'un jour.
  • missingok pour nettoyer les anciens fichiers même lorsqu'aucun nouveau contenu à faire pivoter n'est présent.

La configuration de Logrotate ressemblerait à :

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

Notez que vous devrez peut-être jouer un peu avec copytruncate et d'autres options similaires liées à la manière dont le fichier journal source est créé par un processus externe et à la manière dont il réagit à l'acte de rotation.