98 lines
4.6 KiB
Plaintext
98 lines
4.6 KiB
Plaintext
|
##----------------------------------------------------------------------------
|
||
|
## 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
|