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