##---------------------------------------------------------------------------- ## 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