introducing die function, simplified error handling function
This commit is contained in:
12
init.sh
12
init.sh
@@ -28,14 +28,14 @@ function_exists() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function_exists prnt || (
|
function_exists prnt || (
|
||||||
echo "Il manque des fonctions vitales dans les bibliothèques !"
|
echo "Il manque des fonctions vitales venant des bibliothèques !"
|
||||||
exit 2
|
exit 2
|
||||||
)
|
)
|
||||||
|
|
||||||
# Vérifie qu'on soit root
|
# Vérifie qu'on soit root
|
||||||
if [[ $EUID -ne 0 ]];
|
if [[ $EUID -ne 0 ]];
|
||||||
prnt E "Ce script doit être démarré en tant que root. Arrêt."
|
prnt E "Ce script doit être démarré en tant que root. Arrêt."
|
||||||
exit 1
|
die 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Variables globales importantes
|
# Variables globales importantes
|
||||||
@@ -45,7 +45,7 @@ export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"}
|
|||||||
prnt I "Création du répertoire d'accueil du fichier log..."
|
prnt I "Création du répertoire d'accueil du fichier log..."
|
||||||
[[ ! -d $(dirname $LOGFILE) ]] && mkdir -pv $(dirname $LOGFILE)
|
[[ ! -d $(dirname $LOGFILE) ]] && mkdir -pv $(dirname $LOGFILE)
|
||||||
|
|
||||||
# Log toute les sortie dans le fichier de log
|
# Log toutes les sortie dans le fichier de log
|
||||||
exec 3>&1 4>&2
|
exec 3>&1 4>&2
|
||||||
trap 'exec 2>&4 1>&3' 0 1 2 3
|
trap 'exec 2>&4 1>&3' 0 1 2 3
|
||||||
exec 1>$LOGFILE 2>&1
|
exec 1>$LOGFILE 2>&1
|
||||||
@@ -56,9 +56,13 @@ if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then
|
|||||||
prnt I "Une configuration spécifique sera utilisé."
|
prnt I "Une configuration spécifique sera utilisé."
|
||||||
. $MYPATH/conf/$HOSTNAME.conf
|
. $MYPATH/conf/$HOSTNAME.conf
|
||||||
else
|
else
|
||||||
|
if [[ -e $MYPATH/conf/init.conf.sh ]]; then
|
||||||
prnt I "Une configuration générique sera utilisé."
|
prnt I "Une configuration générique sera utilisé."
|
||||||
[[ -e $MYPATH/conf/init.conf.sh ]] && . $MYPATH/conf/init.conf.sh || (
|
. $MYPATH/conf/init.conf.sh
|
||||||
|
else
|
||||||
prnt E "Aucune configuration trouvée, impossible de continuer."
|
prnt E "Aucune configuration trouvée, impossible de continuer."
|
||||||
|
die 2
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Profile
|
# Profile
|
||||||
|
|||||||
@@ -1,9 +1,18 @@
|
|||||||
# Error management functions
|
# Error management functions
|
||||||
|
|
||||||
function exit_handler()
|
# Exit with error
|
||||||
|
function die()
|
||||||
{
|
{
|
||||||
local error_code="$?"
|
local errorcode=$1
|
||||||
|
prnt E "Sortie prématuré avec erreur (code #$errorcode)."
|
||||||
|
exit $errorcode
|
||||||
|
}
|
||||||
|
export -f die
|
||||||
|
|
||||||
|
function error()
|
||||||
|
{
|
||||||
|
# Check the call is actually the result of an error
|
||||||
|
local error_code="$?"
|
||||||
[[ $error_code == 0 ]] && return;
|
[[ $error_code == 0 ]] && return;
|
||||||
|
|
||||||
# Local variables
|
# Local variables
|
||||||
@@ -13,85 +22,20 @@ function exit_handler()
|
|||||||
|
|
||||||
local error_file=''
|
local error_file=''
|
||||||
local error_lineno=''
|
local error_lineno=''
|
||||||
|
local lineno=$1 && shift
|
||||||
local lineno=''
|
|
||||||
|
|
||||||
|
|
||||||
# Print error header
|
# Print error header
|
||||||
prnt E "${BIWhite}*** ${BIRed}Une erreur fatale est intervenue, \
|
prnt E "${BIWhite}*** ${BIRed}Une erreur fatale est intervenue, \
|
||||||
le script va s'arrêter prématurément !$DEFAULTCOL"
|
le script va s'arrêter immédiatement !$DEFAULTCOL"
|
||||||
|
|
||||||
# Getting backtrace
|
# Print backtrace
|
||||||
_backtrace=$( backtrace 2 )
|
backtrace 2
|
||||||
|
|
||||||
|
|
||||||
# MANAGING THE OUTPUT:
|
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
|
|
||||||
|
|
||||||
regex='^([a-z]{1,}) ([0-9]{1,})$'
|
|
||||||
|
|
||||||
if [[ $error_lineno =~ $regex ]]; then
|
|
||||||
|
|
||||||
# The error line was found on the log
|
|
||||||
# (e.g. type 'ff' without quotes wherever)
|
|
||||||
# --------------------------------------------------------------
|
|
||||||
local row="${BASH_REMATCH[1]}"
|
|
||||||
lineno="${BASH_REMATCH[2]}"
|
|
||||||
|
|
||||||
echo -e "Fichier :\t\t${error_file}"
|
|
||||||
echo -e "${row} :\t\t${lineno}\n"
|
|
||||||
|
|
||||||
echo -e "Code d'erreur :\t${error_code}"
|
|
||||||
else
|
|
||||||
regex="^${error_file}\$|^${error_file}\s+|\s+${error_file}\s+|\s+${error_file}\$"
|
|
||||||
if [[ "$_backtrace" =~ $regex ]]; then
|
|
||||||
|
|
||||||
# The file was found on the log but not the error line
|
|
||||||
# (could not reproduce this case so far)
|
|
||||||
# ------------------------------------------------------
|
|
||||||
echo -e "Fichier :\t\t$error_file"
|
|
||||||
echo -e "Code d'ereur :\t${error_code}"
|
|
||||||
else
|
|
||||||
# The error file is the first on backtrace list:
|
|
||||||
|
|
||||||
# Exploding backtrace on newlines
|
|
||||||
mem=$IFS
|
|
||||||
IFS="\n"
|
|
||||||
IFS=${IFS:0:1}
|
|
||||||
local lines=( $_backtrace )
|
|
||||||
IFS=$mem
|
|
||||||
|
|
||||||
error_file=""
|
|
||||||
if [[ -n "${lines[1]}" ]]; then
|
|
||||||
array=( ${lines[1]} )
|
|
||||||
|
|
||||||
for (( i=2; i<${#array[@]}; i++ )); do
|
|
||||||
error_file="$error_file ${array[$i]}"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Trim
|
|
||||||
error_file="$( echo "$error_file" |
|
|
||||||
sed -e 's/^[ \t]*//' |
|
|
||||||
sed -e 's/[ \t]*$//' )"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "Fichier :\t\t$error_file"
|
|
||||||
echo -e "Colonne :\t\tunknown\n"
|
|
||||||
|
|
||||||
echo -e "Code d'erreur :\t${error_code}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Print the backtrace
|
|
||||||
echo -e "\n$_backtrace\n"
|
|
||||||
|
|
||||||
# Exit the script
|
# Exit the script
|
||||||
prnt E "Sortie !"
|
die $error_code
|
||||||
|
|
||||||
exit "$error_code"
|
|
||||||
}
|
}
|
||||||
trap exit_handler EXIT # ! ! ! TRAP EXIT ! ! !
|
# Trigger error function on error
|
||||||
trap exit ERR # ! ! ! TRAP ERR ! ! !
|
trap error ${LINENO} ERR
|
||||||
|
|
||||||
|
|
||||||
# Print a backtrace
|
# Print a backtrace
|
||||||
@@ -118,4 +62,3 @@ function backtrace
|
|||||||
(( i=i++ ))
|
(( i=i++ ))
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
export -f backtrace
|
|
||||||
|
|||||||
Reference in New Issue
Block a user