Matcher un fichier au format crontab
Hello et meilleurs Vœux pour cette nouvelle année 2014.
Je souhaite faire une fonction script shell qui analyse un fichier de parametrage au format "crontab" :roll:
Exemple voici mon fichier "mon_file_param"
Code:
1 2 3 4
| #Format = minute(s) hour(s) day(s) month(s) weekday(s) Check_Param
0,15,30,45 3 * * * TEST1
0 * * 1,3,5,7,9,11 * TEST2
0 5 * * 1-4 TEST3 |
Si il est 3h15 et que je lance ma_fonction avec le parametre TEST1 le resultat sera 1 (car cela match avec le parametrage)
Idem
Si il est 8h00 et que l'on est sur un mois impaire : le resultat de ma_fonction avec le parametre TEST2 sera aussi 1 (car cela match avec le parametrage)
Idem
Si il est 5h00 et que l'on est un mardi : le resultat de ma_fonction avec le parametre TEST3 sera aussi 1 (car cela match avec le parametrage)
dans le cas contraire je renvoi 0 .
Avant de réinventer le fil à couper le beurre :aie: savez vous s'il existe nativement sous unix/linux de quoi faire cela
Merci de votre aide
@Argoet
Des fois que cela intéresse quelqu’un
Une Solution :mouarf: à défaut j'ai réinventer l'eau tiède :zoubi::roll:8O:calim2::mrgreen::D
Oui , Oui c'est perfectible :oops:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| cat Mon_Fichier_De_Parametrage
# -----------------------------------------------------------------
# Parametrage des Recherches (Base sur le format Crontab)
# Format = minute(s) hour(s) day(s) month(s) weekday(s) Check_Param
# weekday 0=Dimanche 1=Lundi 2=Mardi 3=Mercredi 4=Jeudi 5=Vendredi 6=Samedi
# -----------------------------------------------------------------
# -- Exemple Du Mardi au Dimanche Entre 13h30 et 13h50 Pour TEST1
# -----------------------------------------------------------------
30-50 13 * * 0,2,3,4,5,6 TEST1
# -----------------------------------------------------------------
# -- Exemple Le Lundi entre 7h00 et 7h20 Pour TEST2
# -----------------------------------------------------------------
00-20 7 * * 1 TEST2
# -----------------------------------------------------------------
# -- Exemple Le Lundi entre 0h00 et 6h59 pour TEST3
# -----------------------------------------------------------------
* 00-06 * * 1 TEST3
# -----------------------------------------------------------------
# -- Exemple entre 13h et 14h59 tous les Mercredi
# -----------------------------------------------------------------
* 13,14 * * 3 TEST4 |
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 127 128 129 130
| #!/bin/ksh
FILE_PARAM=Mon_Fichier_De_Parametrage
# ------------------------------------------------------------------------------
# -- Recherche renvoi 0 (Pas Trouve) ou 1 (Trouve)
# -- En fonction du fichier de parametrage $FILE_PARAM
# -- Tous les elements doivent matcher
# -- A Savoir : La minute , L'heure , Le Jour du Mois , Le Mois , Le Jour de la semaine et le parametre
# ------------------------------------------------------------------------------
Recherche()
{
WS="$1"
if [ -f $FILE_PARAM ]
then
cat $FILE_PARAM | grep -v "#" | sed "s/\*/ALL/g" | while read LGN_PARAM
do
# ---------------------------------------------------------
# -- Extraction et decoupage des parametres
# ---------------------------------------------------------
set -A PARAM `echo ${LGN_PARAM}`
SRV_PARAM=`echo $LGN_PARAM | cut -d " " -f6-`
G_TROUVE=`echo $WS | grep "${SRV_PARAM}" | wc -l`
# ----------------------------------------------------------
# -- Check Minute / Heure / Jour / Mois / Jour Semaine / et le Parametre (G_TROUVE = 1)
# ----------------------------------------------------------
if [ $(Check ${V_MIN} ${PARAM[0]}) -eq 1 -a \
$(Check ${V_HEU} ${PARAM[1]}) -eq 1 -a \
$(Check ${V_DAY} ${PARAM[2]}) -eq 1 -a \
$(Check ${V_MOI} ${PARAM[3]}) -eq 1 -a \
$(Check ${V_JSM} ${PARAM[4]}) -eq 1 -a \
${G_TROUVE} -eq 1 ]
then
echo 1
return
fi
done
echo 0
else
echo 0
fi
}
# ---------------------------------------------------------
# -- Fonction Check (Lance par Recherche)
# -- On verifie si P1 (Chiffre unique) match avec P2(Une Chaine de chiffre ou "ALL" )
# ---------------------------------------------------------
# -- P2 est gere avec les formes suivantes
# -- ALL : Toutes Les valeurs
# -- 10 : Uniquement 10
# -- (Virgule) 10,20,30,40 : Soit 10 ou 20 ou 30 ou 40
# -- (Tiret) 10-50 : Compris entre 10 et 50
# ---------------------------------------------------------
Check()
{
P1=$1
P2=$2
# -------------------------------
# - On verifie P2 Avec le Format "ALL"
# -------------------------------
if [ "$P2" = "ALL" ]
then
echo 1
return
fi
# -------------------------------
# - On verifie P2 avec le Format avec ","
# -------------------------------
V=`echo $P2 | grep "\," | wc -l`
if [ $V -eq 1 ]
then
set -- `echo $P2 | sed "s/\,/ /g"`
while [ $# -gt 0 ]
do
if [ $1 -eq $P1 ]
then
echo 1
return
fi
shift
done
echo 0
return
fi
# -------------------------------
# - On verifie P2 avec le Format avec "-"
# -------------------------------
V=`echo $P2 | grep "\-" | wc -l`
if [ $V -eq 1 ]
then
D=`echo $P2 | cut -d "-" -f1`
F=`echo $P2 | cut -d "-" -f2`
if [ $P1 -ge $D -a $P1 -le $F ]
then
echo 1
return
fi
echo 0
return
fi
# -------------------------------
# - On verifie P2
# -------------------------------
if [ $P2 -eq $P1 ]
then
echo 1
return
fi
echo 0
}
V_MIN=`date +"%M"`
V_HEU=`date +"%H"`
V_DAY=`date +"%d"`
V_MOI=`date +"%m"`
V_JSM=`date +"%u"`
date
echo "TEST1 $(Recherche "TEST1")"
echo "TEST2 $(Recherche "TEST2")"
echo "TEST3 $(Recherche "TEST3")"
echo "TEST4 $(Recherche "TEST4")" |
Execution (Un Mercredi à 13:49) :aie:
Code:
1 2 3 4 5
| Wed Jan 15 13:49:26 MET 2014
TEST1 1
TEST2 0
TEST3 0
TEST4 1 |