Gestion des logs en sortie de traitement (lancement de flux talend via un script SH)
Bonjour,:roll::roll::)
Je suis un peu perdu, j'espère que vous pourrez m'aider à retrouver ma route.
Je commence le scripting depuis peu, mais déjà en urgence.
J'explique rapidement :
A ce jour, ma boîte lance des jobs OPCON (ordonnanceur) et appelle une ligne de commande et des paramètres, qui entre autre lance un script shell qui sert à exécuter des flux talend.
La gestion des logs est pour le moment brut, à savoir tout l'historique du lancement, traitement , est positionné dans un log.
La modification qui m'a été demandée de faire, est detraiter différemment les logs de sortie en fin de job. (fin d'exécution du script je suppose)
En fonction des alertes :
Je dois stocker la sortie de cette exécution dans un "nouveau fichier", et selon le résultat :
Soit il y a du "warning" dans le fichier de log temporaire, et là je dois rajouter ces lignes dans le fichier de log déjà eixstant ( à la suite de ce qu'il contient déjà)
Ou si pas d'alerte warning, mais juste de "l'info", je dois supprimer ce fichier temporaire.
J'ai en ma possession le script qui permet de lancer les flux talend (script shell) et également le paramètrage log4j.xml utilisé aussi.
Je vous mets le corps du script sh, si vous pouviez m'aiguiller au moins, sans forcément me dire exactement quoi faire, que je puisse au moins partir sur quelque chose, je n'ai jamais fais de script à ce jour ..
Merci :
PS : le script
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| #!/bin/bash -x
SCHEDULE="$SMA_SCHEDULE_NAME"
JOBNAME="$SMA_user_SPECIFIED_JOBNAME"
# Determine la marque et le domaine d'apres le nom de la schedule (champs 3 et 4)
IFS=- read dummy dummy MARQUE DOMAINE dummy < <( echo "$SCHEDULE" )
#
# v2.5.0 : Détection du nom de l'executable
#
_SCRIPTNAME=$(basename $0 .sh)
user="$1" ; shift
talenddir="$1" ; shift
flux="$1" ; shift
vojdbc="${1}.jar" ; shift
_PLUS=""
if [ $_SCRIPTNAME == "LanceurTalendV2Vars" ]
then
_PLUS="variante VARIABLES "
sep="$1" ; shift
else
if [ "${1:0:1}" != "-" ] && [ "${1:0:1}" != " " ] && [ "${1:0:1}" != "" ]
then
echo "**** ERREUR D'APPEL : verifiez la syntaxe !!!!!!"
exit 100
fi
fi
version="3.0.0"
_REP_OPCON=$(dirname $BASH_SOURCE[0])
echo "BERNIER "
echo "Lanceur Talend "$_PLUS"Version : "$version
echo "================================"
echo " Version spꤩfique U.R."
echo "================================"
verif_nom(){
#
# Verifie que le nom commence par le trigramme d'une société
#
_NOM=$1
_SOCIETES="TDG_OTA_VAC_ITK_AXY_" # Mettre les trigrammes de socité et le _ les uns à la suite des autres "ABC_DEF_GHI_"
#for i in {0..${#_SOCIETES}..4}
lg=${#_SOCIETES}
rtn=10
for (( i=0; i<$lg; i=i+4 ))
do
if [ ${_SOCIETES:$i:4} == ${_NOM:0:4} ]
then
rtn=0
fi
done
return $rtn
}
$_REP_OPCON/VerifCTX.sh /opt/app/ctx/Linux.General.cfg
if [ $? == 0 ] && [ "${flux:7:12}" != "_NUL_NUL_NUL" ]
then
verif_nom $flux
if [ $? == 0 ]
then
REP_LIV=${flux:0:7}
chemin=$talenddir/$REP_LIV/$flux
#Verification de la presence du script {$flux}_run.sh
if [ ! -f ${chemin}/${flux}_ojdbc_run.sh ]
then
cp ${chemin}/${flux}_run.sh ${chemin}/${flux}_ojdbc_run.sh
echo "copie du script run.sh en ojdbc_run.sh"
sed -i "s/ojdbc[0-9][0-9]*.jar/\$vojdbc/g" ${chemin}/${flux}_ojdbc_run.sh
echo "Remplacement de la valeur ojdbc dans le fichier copi顦lux_ojdbc_run_sh"
chown $user ${chemin}/${flux}_ojdbc_run.sh
fi
if [ $_SCRIPTNAME == "LanceurTalendV2Vars" ]
then
cmd=$flux"_ojdbc_run.sh "${*//$sep/=}
else
cmd=$flux"_ojdbc_run.sh "$*
fi
echo "Lanceur: Marque: $MARQUE, Domaine: $DOMAINE"
echo "Lanceur: User: $user"
echo "Lanceur: Chemin: $chemin"
echo "Lanceur: Cmd: $cmd"
fragment="$( mktemp /tmp/tmp.LanceurTalend.XXXXXX )"
chown "$user" "$fragment"
cat >"$fragment" <<'EOF'
[ "$SHELL" = "/bin/bash" -a -e .bash_profile ] && . .bash_profile
[ -e .profile ] && . .profile
echo "ENV set to $ENV"
[ -n "$ENV" -a -e "$ENV" ] && . "$ENV"
umask 0007
EOF
echo export vojdbc=$vojdbc >>"$fragment"
echo "cd \"$chemin\" && /bin/bash $cmd | /usr/bin/awk -f $_REP_OPCON/log.awk" >>"$fragment"
echo "RETURNCODE=\${PIPESTATUS[0]}" >>"$fragment"
# echo "echo \$RETURNCODE" >>"$fragment"
echo "exit \$RETURNCODE" >>"$fragment"
cat "$fragment"
usershell="$( getent passwd "$user" |cut -f7 -d: )"
test -n "$usershell" # Dies if $user does not exist
su - "$user" -c "$usershell $fragment"
RETURNCODE=$?
echo "Lanceur: Return code: $RETURNCODE"
rm "$fragment"
else
echo "Nom du flux incorrect"
RETURNCODE=254
fi
else
if [[ "${flux:7:12}" == "_NUL_NUL_NUL" ]]
then
echo "Flux NULL détecté : aucune action réalisée après vérification du fichier de contexte"
fi
RETURNCODE=$?
fi
exit $RETURNCODE |