L'ensemble des scripts et bibliothèques bash utilisés pour maintenir l'infrastructure du Tetalab. Ce socle Bash est une version légère et adaptée du socle Bash essentiellement développé par Emmanuel Confrère, éminent DBA Calédonien.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

97 lines
4.6 KiB

##----------------------------------------------------------------------------
## Script : rotattrace.lib
## Module Puppet : gnc-script_core_dtsi
## Auteur : Emmanuel Confrere
## Date : 12-04-2017
## Version : 2.0.6
## Objet : Rotation du fichier passe en parametre
##
## Fonction : fct_rotation fichier retention
##
## Detail :
##
# ----------------------------------------------------------------------------
# Mise a jour :
# 1.0.0 24-01-2008 - Emmanuel Confrere - Cre : Creation
# 1.0.0 06-06-2008 - Emmanuel Confrere - Ano : Correction des noms de variable
# 1.1.0 06-06-2008 - Emmanuel Confrere - Evo : Ajout recherche fichier
# 2.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI
# 2.0.1 09-03-2016 - Pierre Trhin - Ano : Ajout du suivie des liens symbolique
# 2.0.2 04-01-2017 - Emmanuel Confrere - Ano : Limiter la profondeur de la purge au dossier specifier - Cf. Jira : DBA-2372
# Ajout d un control de validite des variables L_FIC2 et L_REP_FIC
# 2.0.3 05-01-2017 - Emmanuel Confrere - Ano : Erreur de syntax dans le control de validite
# 2.0.4 06-04-2017 - Emmanuel Confrere - Ano : Degradation de performance serveur (Cf. DBA-2458)
# 2.0.5 06-04-2017 - Emmanuel Confrere - Ano : Degradation de performance serveur,
# ajout de l option "-delete" dans find a la place de "-exec rm {} \;"
# 2.0.6 12-04-2017 - Emmanuel Confrere - Ano : l expension des nom ne se fait pas dans l instruction rm -f "${L_REP_FIC}/${L_FIC2}*"
# a cause des double-cotes. Du coup les fichiers ne sont pas supprimees.
##----------------------------------------------------------------------------
function fct_rotation
{
# Objet : Tourne les fichier de trace
# Parametre : Nom du fichier, periode de retention en jours
local L_FICHIER=`basename $1` # nom du fichier
local L_FIC2=""
local L_RET=$2 # Retention en jour - Entier positif
local L_SEQ=1
local L_REP_FIC="`dirname $1`" # Chemin absolu vers le fichier
local L_TMP=""
local L_TMP2=""
local L_OSPID=""
# Recuperation du PID du fichier ( uniquement pour les fichiers de trace )
L_OSPID=`echo ${L_FICHIER}|sed 's/.*_\([0-9][0-9]*\)\..*/\1/'`
# Si les chaine L_OSPID et L_FICHIER sont egale , alors le SH_SESSION_ID n as pas ete trouve
[ "${L_OSPID}" = "${L_FICHIER}" ] && L_OSPID=""
# L_OSPID doit etre un chiffre !
[ -z "`echo ${L_OSPID}|sed 's/[0-9][0-9]*//'`" ] || L_OSPID=""
if [ -n "${L_OSPID}" ]
then
# L_OSPID n est pas vide, L_FICHIER est donc un fichier de trace
# Extraction du nom de fichiers sans le numero d identification
L_FIC2=`echo ${L_FICHIER}|sed 's/^\(.*\)_\([0-9][0-9]*_[0-9][0-9]*\)\..*/\1/'`
else
L_FIC2=${L_FICHIER}
fi
# On controle ... de securite
[ "${L_FIC2}" = "*" ] && return 1 # Le fichier a supprimer ne peut pas etre "*"
[ -z "${L_FIC2}" -o -z "${L_REP_FIC}" ] && return 4 # Le nom du fichier et son repertoire doivent etre soumis
[ "${L_REP_FIC:0:1}" != "/" ] && return 2 # Le repertoire est fourni en valuer absolu
L_TMP=`echo ${L_REP_FIC}|cut -d "/" -f2` # Les repertoires suivant sont interdit
L_TMP2=`echo "bin boot sbin cgroup dev lib lib64 misc proc root selinux sys srv usr run"|grep -c "${L_TMP}"`
[ ${L_TMP2} -gt 0 ] && return 3
# fct_rotation du fichier ${L_REP_FIC}/${L_FICHIER}
# Suppression des fichier de trace anterieure a ${L_RET} jours
if [ ${L_RET} -eq 0 ]
then
# Si la retention est null on supprime tous les fichiers
rm -f ${L_REP_FIC}/${L_FIC2}*
else
# Limitation de la profondeur de la purge au dossier specifier (Ne pas prendre en compte les sous-dossier - Cf. Jira : DBA-2372)
# pour eliminer un find on reduit la pronfondeur de recherche L_RET-- (Induit par le fonctionnement de find).
((L_RET--))
find -L ${L_REP_FIC} -maxdepth 1 -name ${L_FIC2}\* -daystart -type f -mtime +${L_RET} -delete;
fi
if [ -z "${L_OSPID}" ]
then
# il s agit d un fichier sans SH_SESSION_ID on effectue donc la rotation des fichiers
# Nombre de fichier residuel...
L_SEQ=`ls ${L_REP_FIC}/${L_FICHIER}* 2>/dev/null|wc -l`
# Rotattion des fichiers
while [ ${L_SEQ} -gt 0 ]
do
L_TMP=$(( ${L_SEQ} - 1 ))
[ -f ${L_REP_FIC}/${L_FICHIER}.${L_TMP} ] && mv ${L_REP_FIC}/${L_FICHIER}.${L_TMP} ${L_REP_FIC}/${L_FICHIER}.${L_SEQ}
((L_SEQ--))
done
[ -f ${L_REP_FIC}/${L_FICHIER} ] && mv ${L_REP_FIC}/${L_FICHIER} ${L_REP_FIC}/${L_FICHIER}.1
fi
}
typeset -Ffx fct_rotation