Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1814 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Resolu] Script de rappel de dates d'anniversaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Script de rappel de dates d'anniversaire

n°743430
nlc
Le mieux est l'ennemi du bien
Posté le 21-10-2005 à 22:27:56  profilanswer
 

Bonsoir a tous.
Comme je suis tres tete en l'air, j'oublie tout le temps les dates d'anniversaire de mes proches.
 
J'ai eu une idée qui je pense peut etre tres simple a realiser avec un script, mais je ne sais pas trop comment faire.
Comme j'ai un serveur qui tourne 24/24, il faudrait que le script soit lancé 1 fois par jour, et qu'il lise dans un fichier les dates d'anniversaire configurés ainsi qu'un message associé. (pour le lancer une fois par jour je compte utiliser crontab)
 
On pourrait par exemple avoir un fichier anniversaires.txt qui contiendrait :
 

Code :
  1. 06/10 "Nous sommes le 6 octobre ! C'est l'anniversaire de X !"
  2. 16/12 "Nous sommes le 12 decembre ! C'est l'anniversaire de Y !"


 
Le script lancé chaque jour devrait donc ouvrir ce fichier, regarder si une date correspond a la date du jour, et si oui envoyer un mail avec le message associé.
On pourrait meme envisager de mettre l'adresse mail dans le fichier :
 

Code :
  1. 06/10 destinataire@domaine.truc "Nous sommes le 6 octobre ! C'est l'anniversaire de X !"
  2. 16/12 destinataire@domaine.truc "Nous sommes le 12 decembre ! C'est l'anniversaire de Y !"


 
En fait ensuite on pourrait meme imaginer un truc encore plus generaliste, qui permettrait d'envoyer un mail pour rappeler de faire quelque chose, de facon cyclique (chaque année pour un anniversaire par ex) ou pas (un truc ponctuel), avec une configuration tres souple par une page web ? Une page PHP par exemple qui permettrait de generer le fichier txt contenant les dates, les mails et les messages ?
 
Enfin pour l'instant j'en suis pas là ;)
Il faut que je fasse juste un petit script qui scanne les lignes et envoit un mail au destinataire avec le message associé si la date correspond a la date du jour. Pour envoyer le mail je vais trouver comment faire, mais pour depioter les lignes et tester la date je vois pas  :??:  
 
Si vous avez des idées...   :hello:  
 
Cyril


Message édité par nlc le 22-10-2005 à 14:00:59
mood
Publicité
Posté le 21-10-2005 à 22:27:56  profilanswer
 

n°743436
syl94
Ni!
Posté le 21-10-2005 à 22:40:02  profilanswer
 

c'est typiquement le genre de truc que tu peux faire avec n'importe quel language. Tout depend de tes connaissances.
 
bash est ton ami. Python aussi :)

n°743444
rdc3
Posté le 21-10-2005 à 23:04:59  profilanswer
 

"Une copinedegeek, comme toute femme, est une encyclopédie de dates, elle se rappelle du jour de sa rencontre avec son geek, de toutes les disputes surtout quand c’est l’autre qui a tort (attention aux vieux dossiers), du premier baiser, de la date d’anniversaire de son geek, de ses parents, des parents de son geek, de la date de son mariage etc...
Un homme en général connaît... la date du jour de sa naissance et ne voit pas pourquoi il faudrait retenir toutes ces dates...
Mais parlons plus précisément du geek, avec l’expérience, je commence à intégrer la gestion des anniversaires par nos petits amis les geeks."
 
La suite sur copine de geek

n°743448
nlc
Le mieux est l'ennemi du bien
Posté le 21-10-2005 à 23:10:09  profilanswer
 

Ben oui je sais bien que n'importe quel script pourrait faire l'affaire. Le souci ensuite c'est de le faire ;)
 
Ce que je voudrais faire, c'est un truc du style, que je dois convertir en bash :
 
boucle sur toutes les lignes du fichier
 1) Separer dans 3 variables les 3 champs de la ligne ( $date $destinataire $message )
 2) Si la date correspond, on envoit le mail :
  $dateDuJour=date +%d/%m
  if [ $dateDuJour -eq $date ]; then
   echo $message | mail -s "Anniversaire !!" $destinataire
  fi
fin boucle
 
Là ou je coince, c'est pour faire la boucle et scinder une ligne du fichier en 3 champs.
Comment on peut faire ca en bash ?

n°743452
nlc
Le mieux est l'ennemi du bien
Posté le 21-10-2005 à 23:25:33  profilanswer
 

J'ai fait un bout du script pour debugguer la detection de la bonne date et envoyer le mail. Cette partie fonctionne.
 

Code :
  1. #!/bin/sh
  2. date="21/10";
  3. destinataire="chaenel@free.fr";
  4. message="C'est l'anniversaire de personne !"
  5. dateDuJour=`date +%d/%m`;
  6. if [ $dateDuJour = $date ]; then
  7.         echo $message | mail -s "Anniversaire !!" $destinataire
  8. fi

n°743453
syl94
Ni!
Posté le 21-10-2005 à 23:31:37  profilanswer
 

man bash :)
 
mouais donc, a supposer que le separateur est : (deux points)
mon fichier dates.txt contient ca, et se trouve dans le répertoire courant :

Code :
  1. toto:titi:tata
  2. dodo:didi:dada


 

Code :
  1. #!/bin/sh
  2. for i in `cat dates.txt`;do
  3. var1=`echo $i | cut -d: -f1`
  4. var2=`echo $i | cut -d: -f2`
  5. var3=`echo $i | cut -d: -f3`
  6. done
  7. echo "valeur 1 : ${var1}"
  8. echo "valeur 2 : ${var2}"
  9. echo "valeur 3 : ${var3}"


 
C'est crade, y'a des methodes plus propre pour le faire, mais tu obtiendras ton résultat. Apres, tu fais ce que tu veux des variables


Message édité par syl94 le 21-10-2005 à 23:32:28
n°743466
nlc
Le mieux est l'ennemi du bien
Posté le 22-10-2005 à 00:00:12  profilanswer
 

Bon j'ai reussi a faire un truc qui marche :
 

Code :
  1. #!/bin/sh
  2. admin="xxx@xxx.fr";
  3. file="anniversaire.txt";
  4. # On verifie si le fichier anniversaire existe
  5. if [ ! -f $file ]; then
  6.         echo "Attention, le fichier anniversaire.txt n'existe pas !!" | mail -s "Anniversaire !!" $admin
  7.         exit 1
  8. fi
  9. # On recupere la date du jour
  10. dateDuJour=`date +%d/%m`;
  11. # On teste chaque ligne
  12. cat < $file | while true
  13. do
  14.         # Si le fichier est fini on sort
  15.         read ligne
  16.         if [ "$ligne" = "" ]; then break;
  17.         fi
  18.         # On recupere les 3 champs separés par un ';'
  19.         date=`echo $ligne | awk -F ';' '{print $1}'`
  20.         destinataire=`echo $ligne | awk -F ';' '{print $2}'`
  21.         message=`echo $ligne | awk -F ';' '{print $3}'`
  22.         # Si la date correspond on envoit le mail
  23.         if [ $dateDuJour = $date ]; then
  24.                 echo $message | mail -s "Anniversaire !!" $destinataire
  25.         fi
  26. done


 
Par contre le fichier anniversaire.txt ne doit pas avoir de lignes superflues et doit etre de la forme :
21/10;desti@domaine.truc;C'est l'anniversaire de personne !
 
Pensez vous qu'on peut faire plus simple et plus propre ? Notemment sur la separation des champs peut etre ?


Message édité par nlc le 22-10-2005 à 00:08:05
n°743470
nlc
Le mieux est l'ennemi du bien
Posté le 22-10-2005 à 00:04:18  profilanswer
 

syl94 : ok merci je viens de voir ta reponse. Ok j'ai compris, le principe est un peu le meme que moi mais avec une commande differente.
 
Par contre je vais utiliser ta methode pour la boucle, je trouve ca plus clair que la mienne :)

n°743691
f4ukp
Posté le 22-10-2005 à 18:36:06  profilanswer
 

c'est dingue je voulais faire exactement le meme script il y a 2 jours ...


---------------
Radio Club de Fontainebleau F8KTH
n°743692
M300A
Posté le 22-10-2005 à 18:41:39  profilanswer
 

Trop fort
 
Je met ca dans mon bash.bashrc :love:


Message édité par M300A le 22-10-2005 à 18:41:49
mood
Publicité
Posté le 22-10-2005 à 18:41:39  profilanswer
 

n°743693
f4ukp
Posté le 22-10-2005 à 18:42:53  profilanswer
 

le format du fichier text m'a l'air un peu chiant ... Je me demande si je vais pas faire ca en php/mysql avec la page php appellé a traver un wget par le cron ... Si l'un de vous a déjà fait ca m'evitera de la refaire :)


---------------
Radio Club de Fontainebleau F8KTH
n°743936
nlc
Le mieux est l'ennemi du bien
Posté le 23-10-2005 à 16:16:23  profilanswer
 

En meme temps, le fichier texte, une fois qu'il est rempli..... ;)

n°747611
hobgob_
Posté le 02-11-2005 à 00:29:29  profilanswer
 

Citation :


Code :
 
    * #!/bin/sh
    *
    * admin="xxx@xxx.fr";
    * file="anniversaire.txt";
    *
    *
    *
    * # On verifie si le fichier anniversaire existe
    *
    * if [ ! -f $file ]; then
    *         echo "Attention, le fichier anniversaire.txt n'existe pas !!" | mail -s "Anniversaire !!" $admin
    *         exit 1
    * fi
    *
    *
    *
    * # On recupere la date du jour
    *
    * dateDuJour=`date +%d/%m`;
    *
    *
    * # On teste chaque ligne
    *
    * cat < $file | while true
    * do
    *         # Si le fichier est fini on sort
    *
    *         read ligne
    *         if [ "$ligne" = "" ]; then break;
    *         fi
    *
    *         # On recupere les 3 champs separés par un ';'
    *
    *         date=`echo $ligne | awk -F ';' '{print $1}'`
    *         destinataire=`echo $ligne | awk -F ';' '{print $2}'`
    *         message=`echo $ligne | awk -F ';' '{print $3}'`
    *
    *         # Si la date correspond on envoit le mail
    *
    *         if [ $dateDuJour = $date ]; then
    *                 echo $message | mail -s "Anniversaire !!" $destinataire
    *         fi
    *
    * done


 
Sympa ce script ! J'aimerais savoir s'il était possble d'y apporter une petite modification.
J'ai une dizaine de comptes utilisateurs sur mon serveur et plutôt que d'avoir un seul fichier "anniversaire.txt", j'aimerais que le script prenne en compte les fichiers "anniversaire.txt" de tous les utilisateurs du serveur. De manière à ce que chaque utilisateur puisse apporter ses propres modification dans son fichier "anniversaire.txt" situé dans /home/username.
 
C'est possible ?
Merci d'avance...

n°747657
syl94
Ni!
Posté le 02-11-2005 à 09:13:35  profilanswer
 

oui, c'est faisable, et meme facilement realisable. On pourrait placer une condition en tete du script genre  
 

Code :
  1. if [ -f ~/anniversaire.txt ];then
  2. ...
  3. fi


 
ensuite, un appel au script dans le .bashrc (ou autre *rc du shell user)

n°748782
nlc
Le mieux est l'ennemi du bien
Posté le 04-11-2005 à 20:52:49  profilanswer
 

C'est vrai que ton idée hobgob est pas mal.
 
Mais je pense que plutot que le script soit lancé dans le bashrc de l'utilisateur, il faudrait que le script soit lancé par crond tous les matins, et qu'il scanne tous les repertoires utilisateurs pour voir si l'un d'entre eux possede un fichier anniversaire.txt.


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
n°748821
Zaib3k
Posté le 04-11-2005 à 22:50:30  profilanswer
 

Citation :

   *         date=`echo $ligne | awk -F ';' '{print $1}'`
    *         destinataire=`echo $ligne | awk -F ';' '{print $2}'`
    *         message=`echo $ligne | awk -F ';' '{print $3}'`


beurk :D
 

Citation :

IFS=;
set $ligne


 
et hop la date est dans $1, le destinataire dans $2 et le message dans $3 !


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°748822
Zaib3k
Posté le 04-11-2005 à 22:52:08  profilanswer
 

nlc a écrit :

C'est vrai que ton idée hobgob est pas mal.
 
Mais je pense que plutot que le script soit lancé dans le bashrc de l'utilisateur, il faudrait que le script soit lancé par crond tous les matins, et qu'il scanne tous les repertoires utilisateurs pour voir si l'un d'entre eux possede un fichier anniversaire.txt.


 
 
/etc/bashrc ou un truc dans le genre et ca roule. pas besoin de "scanner".


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
n°749878
matafan
Posté le 07-11-2005 à 21:34:02  profilanswer
 

Si tu met ca dans un bashrc, tu aura un message a chaque fois que tu lances un nouveau shell (xterm...). En plus, bashrc n'est pas sense produire d'output car ca casse scp et rcp. Et enfin ca ne s'appliquera pas aux utilisateurs qui n'utilisent pas bash.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Resolu] Script de rappel de dates d'anniversaire

 

Sujets relatifs
crontab : problème d'execution d'un script[A moitié résolu] Problème client Samba
compiler gdb sur une debian sarge [Résolu][RESOLU] Problème install kubuntu 5.10 > bootstrap
Bruit bizarre dans mon pc (resolu)[RESOLU] Taille de partition : BIZARRE !!!!
[résolu, jesuisunboulet] kernel panic après recompilCyrus-imap Authentification.... completement perdu...[RESOLU]
[suse 10][résolu] Partitionnement impossible[merci dark] Mandriva 2006 - Soucis avec le script IPCheck....
Plus de sujets relatifs à : [Resolu] Script de rappel de dates d'anniversaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR