Raspberry Pi : envoyer en ftp un fichier à un serveur, par Cron Job

Comment envoyer, à partir d’un Rasberry Pi, un fichier txt toutes les 20 minutes à un serveur distant ? La réponse passe par une connexion FTP et un cronjob, ou tâche planifiée.

Mes objectifs

Sur un Raspberry Pi, j’ai créé un script Shell qui relève la température, la date et l’heure, le nom du Pi et les écrit dans un fichier txt avec la chaîne de caractère définie dans la commande. Ce script, est décrit dans l’article « Raspberry Pi : Mesurer la température avec un capteur DS18B20. Le fichier texte créé s’appelle [hostname]-status.txt.

Maintenant je veux envoyer ce fichier texte à un serveur distant, en FTP.

Et je veux que cet envoi soit réalisé automatiquement toutes les 20 minutes.

Envoyer un fichier à un serveur distant en FTP

Pour connecter un Pi comme client à un serveur, il faut lui installer une application.

Pour installer le package FTP (j’ai choisi celui qui paraissait le plus léger) :

Maintenant, je peux me connecter à un serveur distant.

Je crée le script send-status.sh, avec droits 744 (exécutable) :

Lorsque je l’éxécute en ligne de commande (), le serveur reçoit bien le fichier texte.

Le Pi affiche un message de succès (mais si) :

Donc cette opération est correctement réalisée par la ligne de commande.

Réaliser cette action automatiquement (tâche planifiée)

Nous avons déjà essayé le script à la main avec

Et ça fonctionnait. Maintenant, il faut définir l’environnement d’abord, puis indiquer la commande à exécuter et sa fréquence.

Planifier l’exécution du script

Sur le pi, éditer /etc/crontab avec crontab –e :

Y ajouter à la fin (utiliser SHIFT INS pour coller) :

Attention : il doit obligatoirement y avoir une ligne vide à la fin de crontab….

Il faut créer une première fois  /home/jf/snd/cron.log et lui donner des droits d’accès en écriture (664).

Le crontab ne démarrera pas tant qu’on aura pas fait un reboot, donc

Remarques sur les cron jobs et leur debogage, sur Pi

Cron Job

Un cron job se déclenche dans un environnement différent de celui d’un lancement manuel !

Dans le script j’ai ajouté printenv, qui affiche toutes les variables d’environnement.

Et en principe on peut envoyer le cron vers un fichier log mais sur le Pi en cours, je n’y arrive pas.

Comme le cronjob fonctionne, ça n’est pas grave.

Le fichier /var/log/syslog contient également beaucoup d’informations sur ce qui se passe dans le pi.

le cron job @reboot

la ligne @reboot bash /home/jf/exec/send-status.sh REBOOT  exécute la tâche lors du reboot du Pi.

Si je reboot le pi ‘pi-name’, le serveur distant reçoit un fichier pi-name-status.txt contenant

Et maintenant

J’ai terminé cette opération. A vous maintenant !

Un commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *