Crontab

Résolu/Fermé
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 - 23 juin 2014 à 19:44
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 - 27 juin 2014 à 13:07
Bonjour,

Je voudrais recevoir une alerte via crontab

* Tous les 2em mardis de chaque mois.
* Tous les dernier mardis de chaque mois.

Personnellement je n'ai pas trouvé la bonne formule dans crontab

# Tous les 2em mardis de chaque mois à 00H00
00 00 2-7 * 2 bash /home/serveur/scripts/crontab/envoi-mail-assoc-deuxieme-mardis.sh

# Tous les dernier mardis de chaque mois à 00H00
Je n'arrive pas a trouvé la formule

Merci.

19 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
24 juin 2014 à 08:59
Salut,

# Tous les dernier mardis de chaque mois à 00H00
Y'a pas ça en magasin ;-(
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 24/06/2014 à 09:14
hello
dans un script à exécuter tous les jours, plutot qu'une ligne cron
m2 c'est le 2ème mardi du mois, md le dernier
read m2 md <<<$(ncal | awk '/^Tu/ {print $3, $NF}')
et on teste avec $(date +%d)
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 24/06/2014 à 12:15
Bonjour,

Avec :
read m2 md <<<$(ncal | awk '/^Tu/ {print $3, $NF}')
echo "Le dernier mardi du mois de $(date +%B) est le : $(date +%d)"

Résultat :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-dernier-mardis.sh
Le dernier mardi du mois de juin est le : 24
serveur@debian:~$

Ok mais comment dire à mail d'envoyer l'email quand ce sera le 24 du mois par exemple ?

message="Le corps du message"
sujet="Le sujet du message"
destinataire="mail.mail@fai.fr"
echo "$message" | mail -v -s "$sujet" $fichier $destinataire

Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
24 juin 2014 à 12:22
mais comment dire à mail d'envoyer l'email quand ce sera le 24 du mois par exemple ?
En testant en début de script si la date du jour correspond à la valeur renvoyée par la commande de dubcek ;-\
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 24/06/2014 à 12:32
en exécutant le script tous les jours et en testant si date +%d == $m2 alors deuxième mardi ou == $md dernier mardi
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 24/06/2014 à 14:13
Re,

Y a un problème ?
date: opérande supplémentaire « == »
Saisissez « date --help » pour plus d'informations.

ncal est en français chez moi
serveur@debian:~$ ncal                                                                                                                                                                                            
Juin 2014
lu 2 9 16 23 30
ma 3 10 17 24
me 4 11 18 25
je 5 12 19 26
ve 6 13 20 27
sa 7 14 21 28
di 1 8 15 22 29 serveur@debian:~$


Test :
serveur@debian:~$ ncal | awk '/^ma/ {print $3, $NF}'
10 24
serveur@debian:~$



Avec :
read m2 md <<<$(ncal | awk '/^ma/ {print $3, $NF}')
echo "Le 2em mardi du mois de $(date +%B) est : $m2" #$(date +%d)"
echo "Le dernier mardi du mois de $(date +%B) est : $md" #$(date +%d)"

echo
echo "2em mardis de chaque mois : date +%d == $m2"
date +%d == $m2
echo
echo "Dernier mardis de chaque mois : date +%d == $md"
date +%d == $md


Résultat :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
Le 2em mardi du mois de juin est : 10
Le dernier mardi du mois de juin est : 24

2em mardis de chaque mois : date +%d == 10
date: opérande supplémentaire « == »
Saisissez « date --help » pour plus d'informations.

Dernier mardis de chaque mois : date +%d == 24
date: opérande supplémentaire « == »
Saisissez « date --help » pour plus d'informations.
serveur@debian:~$

Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 24/06/2014 à 14:12
affiche le résultat de :
ncal
entre balises code
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 24/06/2014 à 14:29
Re,

Voilà le résultat :
serveur@debian:~$ ncal
Juin 2014
lu 2 9 16 23 30
ma 3 10 17 24
me 4 11 18 25
je 5 12 19 26
ve 6 13 20 27
sa 7 14 21 28
di 1 8 15 22 29
serveur@debian:~$

serveur@debian:~$ date
mardi 24 juin 2014, 14:27:43 (UTC+0200)
serveur@debian:~$

serveur@debian:~$ date +%d == 24
date: opérande supplémentaire « == »
Saisissez « date --help » pour plus d'informations.
serveur@debian:~$

Merci.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 juin 2014 à 14:40
à exécuter chaque jour
#!/bin/bash
read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
if [ $J -eq $M2 ]; then
echo 2eme mardi
else
if [ $J -eq $MD ]; then
echo dernier mardi
else
echo journée banale et affligeante
fi
fi
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
24 juin 2014 à 15:09
Re,

Heu y a une erreur !
/home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh: ligne 26 : [: 24 : nombre entier attendu comme expression

Avec :
read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
if [ $J -eq $M2 ]; then
echo 2eme mardi
else
if [ $J -eq $MD ]; then
echo dernier mardi
else
echo journée banale et affligeante
fi
fi

Le résultat est :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
/home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh: ligne 26 : [: 24 : nombre entier attendu comme expression
journée banale et affligeante
serveur@debian:~$

Merci.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 juin 2014 à 15:25
affiche les lignes numérotées pour voir la 26
chez moi
$ head -13  f1
#!/bin/bash
read M2 MD <<<$(ncal | awk '/^Tu/ {print $3, $NF}'); J=$(date +%d)
if [ $J -eq $M2 ]; then
echo 2eme mardi
else
if [ $J -eq $MD ]; then
echo dernier mardi
else
echo journée banale et affligeante
fi
fi
$ ./f1
dernier mardi
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
24 juin 2014 à 15:38
ou essayer avec case
read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
case $J in
$M2) echo 2eme mardi ;;
$MD) echo dernier mardi ;;
*) echo journée banale et affligeante ;;
esac
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 24/06/2014 à 16:57
Re,

Les cases doivent être écrit en dur il me semble.
mais ça marche pas nom plus.

Avec :
read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
echo "J - Nous somme le : $J"
echo "M2 - Le 2em mardi de ce mois est le : $M2"
echo "MD - Le dernier mardi de ce mois est le : $MD"
echo

case $J in
$M2) echo 2eme mardi ;;
$MD) echo dernier mardi ;;
*) echo journée banale et affligeante ;;
esac

Résultat :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
J - Nous somme le 24
M2 - Le 2em mardi de ce mois est le : 10
MD - Le dernier mardi de ce mois est le : 24

journée banale et affligeante
serveur@debian:~$


Je pense que la meilleure solution était votre avant dernier code.
Mais qu'est-ce qui fait qui nous différents si le résultat du code ?

Merci.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 25/06/2014 à 08:51
pour l'avant dernier code, montre les lignes numérotées, pour voir la 26
quel système ?
si je change ^ma par ^We (je laisse mardi dans les echo) ca marche avec le code précédent, on est bien le dernier We du mois
$ ./f1
J - Nous somme le : 25
M2 - Le 2em mardi de ce mois est le : 11
MD - Le dernier mardi de ce mois est le : 25

dernier mardi
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
25 juin 2014 à 11:02
essayer
#!/bin/bash
read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
if [ $J -eq $M2 ]; then
echo 2eme mardi
elif [ $J -eq $MD ]; then
echo dernier mardi
else
echo journée banale et affligeante
fi
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 25/06/2014 à 17:11
Re,

Pour l'instant il me répond :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
J - Nous somme le : 25
M2 - Le 2em mardi de ce mois est le : 10
MD - Le dernier mardi de ce mois est le : 24

journée banale et affligeante
serveur@debian:~$
Je n'arrive pas a mettre la date au 24/06/2014 pour faire un test .

Date actuel :
serveur@debian:~$ date
mercredi 25 juin 2014, 17:07:37 (UTC+0200)
serveur@debian:~$

Impossible de modifier la date :
root@debian:/home/serveur# date -s "24/06/2014"
date: date non valide « 24/06/2014 »
root@debian:/home/serveur#

Merci.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 26/06/2014 à 09:15
pour la date essayer: date -s "6/24/2014"
pour tester changer le jour dans le awk (^ma) plutot que changer la date du système, on est à la fin du mois, dernier jeudi
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
26 juin 2014 à 09:44
reconnait le jour:
#!/bin/bash
s=(lundi mardi mercredi jeudi vendredi samedi dimanche)
#wd=(Mo Tu We Th Fr Sa Su)
wd=(lu ma me je ve sa di)
j=${s[$(date +%u)-1]}; d=${wd[$(date +%u)-1]} ;
read M2 MD <<<$(ncal | awk -v d=$d '$1 ~ d {print $3, $NF}'); J=$(date +%d)
if [ $J -eq $M2 ]; then
echo 2eme $j
elif [ $J -eq $MD ]; then
echo dernier $j
else
echo journée banale et affligeante
fi
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 26/06/2014 à 12:41
Bonjour,

Mon os est : Kubuntu 12.04.4 LTS.
Je n'y avais pas pensé de changer dans le awk (^ma) plutot que de changer la date du système.

Avec :
serveur@debian:~$ cat -n /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
1 #!/bin/bash
2
3
4
5
6 read M2 MD <<<$(ncal | awk '/^je/ {print $3, $NF}'); J=$(date +%d)
7 echo "J - Nous somme le : $J"
8 echo "M2 - Le 2em mardi de ce mois est le : $M2"
9 echo "MD - Le dernier mardi de ce mois est le : $MD"
10 echo
11
12 read M2 MD <<<$(ncal | awk '/^je/ {print $3, $NF}'); J=$(date +%d)
13 if [ $J -eq $M2 ]; then
14 echo 2eme mardi
15 elif [ $J -eq $MD ]; then
16 echo dernier mardi
17 else
18 echo journée banale et affligeante
19 fi
serveur@debian:~$

j'ai ce message d'erreur :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
J - Nous somme le : 26
M2 - Le 2em mardi de ce mois est le : 12
MD - Le dernier mardi de ce mois est le : 26

/home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh: ligne 15 : [: 26 : nombre entier attendu comme expression
journée banale et affligeante
serveur@debian:~$

2em test
Et avec ce code :
serveur@debian:~$ cat -n /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
1 #!/bin/bash
2
3
4 s=(lundi mardi mercredi jeudi vendredi samedi dimanche)
5 #wd=(Mo Tu We Th Fr Sa Su)
6 wd=(lu ma me je ve sa di)
7 j=${s[$(date +%u)-1]}; d=${wd[$(date +%u)-1]} ;
8 read M2 MD <<<$(ncal | awk -v d=$d '$1 ~ d {print $3, $NF}'); J=$(date +%d)
9 if [ $J -eq $M2 ]; then
10 echo 2eme $j
11 elif [ $J -eq $MD ]; then
12 echo dernier $j
13 else
14 echo journée banale et affligeante
15 fi
16 echo "J - Nous somme le : $J"
17 echo "M2 - Le 2em mardi de ce mois est le : $M2"
18 echo "MD - Le dernier mardi de ce mois est le : $MD"
19 echo
20
21
22 exit 0

Avec comme retour :
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
/home/serveur/scripts/crontab/envoi-mail-gullivar-mardis.sh: ligne 34 : [: 26 : nombre entier attendu comme expression
journée banale et affligeante
J - Nous somme le : 26
M2 - Le 2em mardi de ce mois est le : 12
MD - Le dernier mardi de ce mois est le : 26

serveur@debian:~$

Je n'arrive pas a comprendre pourquoi chez vous ça marche et chez moi non ????

Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
26 juin 2014 à 13:46
Salut,

Rajoute l'option "-h" à
ncal
.

Voilà comment est vue ta variable $MD :
$ echo "${MD}" | cat -A
_^H2_^H6$

Ci-dessous la différence sans et avec l'option -h :

$ ncal | cat -A
Juin 2014 $
lu 2 9 16 23 30$
ma 3 10 17 24 $
me 4 11 18 25 $
je 5 12 19 _^H2_^H6 $
ve 6 13 20 27 $
sa 7 14 21 28 $
di 1 8 15 22 29 $

$ ncal -h | cat -A
Juin 2014 $
lu 2 9 16 23 30$
ma 3 10 17 24 $
me 4 11 18 25 $
je 5 12 19 26 $
ve 6 13 20 27 $
sa 7 14 21 28 $
di 1 8 15 22 29 $
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 26/06/2014 à 13:58
effectivement, bien que chez moi:
$ read M2 MD <<<$(ncal | awk -v d=Th '$1 ~ d {print $3, $NF}'); J=$(date +%d)
$ echo $M2 $MD | cat -A
12 26$
$ echo "${M2} ${MD}" | cat -A
12 26$
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
Modifié par zipe31 le 26/06/2014 à 14:02
Il m'a fallu un moment pour trouver d'où venaient les caractères zarbis ;-\

Voilà ce que me renvoyait le shell (set -x) :
+ '[' 26 -eq 12 ']'
+ '[' 26 -eq $'_\b2_\b6' ']'
./plop: ligne 12 : [: 26 : nombre entier attendu comme expression
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 26/06/2014 à 14:08
mon ncal supprime les effets video si il y a un pipe ou >
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 418
26 juin 2014 à 14:12
Idem sous Debian (pas d'effet avec un pipe). Par contre sous Mint les effets restent ;-\
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 26/06/2014 à 23:56
Bonsoir,

Le serveur est sur Debian Wheezy 3.0.4.

Merci.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
27 juin 2014 à 08:45
et avec ncal -h ?
placer un set -x au début du script
0
xunil2003 Messages postés 766 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2024 14
Modifié par xunil2003 le 27/06/2014 à 13:08
Bonjour,

Avec :
serveur@debian:~$ cat -n /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
1 #!/bin/bash
2
3
4 read M2 MD <<<$(ncal -h | awk '/^ve/ {print $3, $NF}'); J=$(date +%d)
5 if [ $J -eq $M2 ]; then
6 echo 2eme mardi
7 else
8 if [ $J -eq $MD ]; then
9 echo dernier mardi
10 else
11 echo journée banale et affligeante
12 fi
13 fi
14 echo
15 echo "J - Aujourd'hui nous sommes le : $J"
16 echo "M2 - Le 2em mardi de ce mois est le : $M2"
17 echo "MD - Le dernier mardi de ce mois est le : $MD"
18 echo
19
20 exit 0
serveur@debian:~$
Vous remarquerez que j'ai m'y l'option -h à ncal.

Il m'affiche correctement que nous sommes le dernier Vendredi du mois.
serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
dernier mardi

J - Aujourd'hui nous sommes le : 27
M2 - Le 2em mardi de ce mois est le : 13
MD - Le dernier mardi de ce mois est le : 27

serveur@debian:~$

Si je remplace dans le code
awk '/^ve/
par
awk '/^ma/
il me retourne :

serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
journée banale et affligeante

J - Aujourd'hui nous sommes le : 27
M2 - Le 2em mardi de ce mois est le : 10
MD - Le dernier mardi de ce mois est le : 24

serveur@debian:~$


Je pense que c'est bon maintenant.

Merci.
0