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