mardi 12 janvier 2016

Automatiser des tâches réalisées par le RaspberryPi CRON

CRON permet de réaliser des tâches, lancer des programmes à des heures définies de façon répétitives, toutes les minutes, toutes les heures, toutes les semaines, tous les mois ou annuellement.

On défini toutes ces commandes dans la crontab.

Prérequis à tout ceci que le raspberrypi connaisse la date et l'heure précisément, en effet le RaspberryPi n'a pas d'horloge interne, il faut donc lui apprendre a se mettre à l'heure via internet (NTP) soit pour les projets nomades (ce qui n'est pas notre cas ici) par le biais de l'ajout d'un composant électronique qui lui donnera la date et l'heure.

Allons y.

sudo apt-get update
 
sudo apt-get upgrade

Vérifion déja si le service n'est pas déja installé :

ps aux | grep ntp
 
J'obtiens : 
 
pi@gladys:~ $ ps aux | grep ntp
ntp        438  0.0  0.8   5652  3760 ?        Ss   Jan12   0:15 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:112
pi       26019  0.0  0.4   4256  2056 pts/0    S+   09:43   0:00 grep --color=auto ntp
Le service ntp semble opérationnel.

Ensuite je lance la commande "date"

pi@gladys:~ $ date
Tue 12 Jan 19:43:29 UTC 2016


La date est bonne mais l'heure retarde d'une heure, je sais pourquoi.
Je n'ai pas configuré le fuseau horaire.

pi@gladys:~ $ sudo raspi-config

Current default time zone: 'Europe/Paris'
Local time is now:      Tue Jan 12 20:43:46 CET 2016.
Universal Time is now:  Tue Jan 12 19:43:46 UTC 2016.


Voilà raspi-config a réglé le problème

pi@gladys:~ $ date
Tue 12 Jan 20:44:17 UTC 2016


Si ntp n'est pas fonctionnel :

Installation de ntp:

sudo apt-get install ntp

Lancement du service
   
sudo /etc/init.d/ntp start

Configuration:

sudo nano /etc/ntp.com

mettre un serveur fr

server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org


"CTRLX" puis à la demande de nano "O"

vérifier la synchronisation:

ntpq -p

Maintenant que le RaspberryPi est à l'heure, on peut se lancer dans la crontab.

Il y a deux commandes qui von nous servir,   crontab -l   et    crontab -e

La première nous montre le contenu de la crontab

La seconde ouvre la crontab dans l'editeur texte défini par déffaut, nano sur le raspberry pi.

Avant de se lancer dans ces modifications j'effectue une sauvegarde de la crontab existante.

sudo cp crontab crontab_originale

maintenant c'est parti pour quelques exemples.

sudo crontab -e

si c'est la première utilisation il va nous demander quel éditeut on veut utiliser.

pi@gladys:~ $ crontab -e
no crontab for pi - using an empty one

/usr/bin/select-editor: 1: /usr/bin/select-editor: gettext: not found
 'select-editor'.
  1. /bin/ed
/usr/bin/select-editor: 1: /usr/bin/select-editor: gettext: not found
  2. /bin/nano        <----
  3. /usr/bin/vim.tiny

/usr/bin/select-editor: 32: /usr/bin/select-editor: gettext: not found
 1-3 [2]: 2  Je renseigne ici "2" pour utiliser nano
No modification made


Puis il lance nano avec la crontab vierge :


Je me rends sur la dernière ligne avec les flèches du clavier.

Toutes les lignes qui commencent par # sont commentées c'est à dire que la crontab ne les prendra pas en compte.

Je commente d'abord l'action que je veut faire réaliser régulièrement à la crontab, ça me permettra quand j'y reviendrais de retrouver ce que j'avais voulu faire faire

Je souhaite que la crontab me donne la date et l'heure toutes les 1 minutes et l'enregistre de façon datée dans un fichier texte

#enregistrer dans le fichier /home/pi/du.txt la date et l'heure toutes les 1 minutes

Maintenant il faut que je dise à cron quand il faut qu'il le fasse, c'est le début de la ligne de la forme :

mm hh jj MMM JJJ 
 
  • mm représente les minutes (de 0 à 59)
  • hh représente l'heure (de 0 à 23)
  • jj représente le numéro du jour du mois (de 1 à 31)
  • MMM représente l'abréviation du nom du mois (jan, feb, ...) ou bien le numéro du mois (de 1 à 12)
  • JJJ représente l'abréviation du nom du jour ou bien le numéro du jour dans la semaine :
Une étoile veut dire toutes les itération, et on peut mettre un slash (/) pour donner un interval sur chaque itération.
Ce qui nous donne : 


*/1 * * * *

Ensuite il  faut que je lui indique la tâche à executer toutes les 1 minute.

*/1 * * * * date >>/home/pi/log.txt
 
Soit :
 

 


"CTR X" puis "Y" puis "enter"
 
Je patiente quelques minutes et si on lit le fichier  /home/pi/log.txt j'obtiens :


Tue 12 Jan 20:59:02 CET 2016
Tue 13 Jan 21:00:01 CET 2016
Tue 13 Jan 21:01:01 CET 2016
Tue 13 Jan 21:02:01 CET 2016
Tue 13 Jan 21:03:01 CET 2016

Bien sur il y a bien d'autres commandes plus intéressante à automatiser, notez que la planification n'est précise qu'à quelques secondes prêt.


Sources :

CRON

https://fr.wikipedia.org/wiki/Cron
https://doc.ubuntu-fr.org/cron
https://help.ubuntu.com/community/CronHowto
http://www.admin-debian.com/gestion-des-processus/cron-ou-comment-lancer-des-taches-sous-linux/
https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/executer-un-programme-a-une-heure-differee

NTP

https://help.ubuntu.com/lts/serverguide/NTP.html
http://www.system-linux.eu/index.php?post/2010/01/05/Mettre-vos-serveurs-%C3%A0-la-bonne-heure-avec-NTP
http://support.ntp.org/bin/view/Support/InstallingNTP
https://wiki.debian.org/fr/NTP
http://raspberrypi.stackexchange.com/questions/8231/how-to-force-ntpd-to-update-date-time-after-boot


Aucun commentaire:

Enregistrer un commentaire