Page 1 sur 3

Configuration de la crontab

Posté : lun. 24 nov. 2014 18:53
par micsec
bonjour,
j'essaie de configurer la fonction CRON pour réaliser automatiquement des tâches périodiquement. Je voudrais exécuter un programme PHP.
Je me suis inspiré du site suivant :
http://www.raspberrypi.org/documentatio ... ge/cron.md
contenu de ma table :
*/5 * * * * /home/pi/job.sh
*/5 * * * * /home/pi/envoi_notification.php

job.sh contient :
#!/bin/sh
date >> crontest.txt

Cette dernière tâche fonctionne bien, le fichier crontest.txt contient bien la date et l'heure en clair, une nouvelle ligne toutes les 5 minutes comme c'est configuré dans la table cron.

Par contre, la 2e ligne de la table cron (.... envoi_notification.php) ne fonctionne pas, alors que lorsque j'appelle ce programme PHP à partir de mon navigateur, ça fonctionne (http://xxx.xxx.xxx.xxx/envoi_notification.php)

Je pense que l'appel d'un php dans la table cron nécessite quelque chose pour que ça marche.

Quelqu'un a-t-il une idée ?
Merci d'avance

Re: Configuration de la crontab

Posté : lun. 24 nov. 2014 19:05
par Manfraid
Salut, tu as plusieurs possibilité soit a la place de

Code : Tout sélectionner

*/5 * * * * /home/pi/envoi_notification.php
tu met si tu peu lancer le script en ligne de commande

Code : Tout sélectionner

*/5 * * * *  php /home/pi/envoi_notification.php
ou ceci si tu veux y accéder a travers le serveur web

Code : Tout sélectionner

*/5 * * * * curl http://xxx.xxx.xxx.xxx/envoi_notification.php

Re: Configuration de la crontab

Posté : lun. 24 nov. 2014 20:19
par domi
Bon, bien Manfraid a été plus rapide que moi ;-)

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 11:25
par mikebzh44
Et oui, ton erreur est qu'en ne précisant pas avec quel exécutable / shell ton fichier PHP doit être exécuté, le RPi l'exécute avec le shell par défaut.

Donc, soit tu fais comme Manfraid et tu précises dans la ligne de commande de la crontab que tu veux utiliser le PHP :
Manfraid a écrit :tu met si tu peu lancer le script en ligne de commande

Code : Tout sélectionner

*/5 * * * *  php /home/pi/envoi_notification.php
Soit tu exécutes ta page PHP comme si elle était appelée d'un navigateur :
Manfraid a écrit : ou ceci si tu veux y accéder a travers le serveur web

Code : Tout sélectionner

*/5 * * * * curl http://xxx.xxx.xxx.xxx/envoi_notification.php
Soit, et c'est comme ça que je procède, tu précises en début de fichier PHP quel moteur d'exécution doit être utilisé :

Code : Tout sélectionner

#!/usr/bin/php
<?php
  echo "hello world\n";
?>
Et je change aussi les droits du fichier pour qu'il soit exécutable (chmod u+x nomdufichier.php), mais c'est peut-être inutile.

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 16:26
par micsec
merci des réponses, hélas ça ne marche toujours pas.
j'ai noté qu'il y a plusieurs environnement CRON
1) crontab -e 'en restant dans la racine /home/pi/
2) sudo nano /etc/crontab

J'ai essayé dans les 2 cas avec les 2 solutions que vous me proposez.
a) */5 * * * * php /home/pi/envoi_notification.php
b) */5 * * * * curl http://xxx.xxx.xxx.xxx/envoi_notification.php

En plus dans la méthode 2), j'ai mis pour tester "*/5 * * * * /home/pi/job.sh" où job.sh alimente un fichier avec la date (date >> crontest.txt). Lorsque l'appel du PHP est présent dans le crontab, la commande job.sh ne marche plus. Il semble que l'appel du PHP met le crontab en erreur.

Qu'en pensez-vous ?
merci

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 16:40
par mikebzh44
Et oui, il y a une crontab par utilisateur ;)

crontab -e en étant connecté avec le user pi = crontab du user pi
sudo crontab -e = crontab du super-user root

Déjà, tu peux te limiter à la crontab du user pi

Tu édites ton fichier /home/pi/envoi_notification.php
Tu rajoutes la ligne en début de fichier : #!/usr/bin/php
Tu marques le fichier comme exécutable : chmod u+x /home/pi/envoi_notification.php
Déjà, si tu exécutes /home/pi/envoi_notification.php, ça doit marcher

Sinon, si tu mets cette ligne :

*/5 * * * * curl http://xxx.xxx.xxx.xxx/envoi_notification.php

Cela signifie que ton fichier envoi_notification.php est dans le repertoire www de ton serveur web, et non à la racine du compte utilisateur pi.
Mais je doute que tu ais installé un serveur web sur ton RPi ;)

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 17:08
par mike913
micsec a écrit : Par contre, la 2e ligne de la table cron (.... envoi_notification.php) ne fonctionne pas, alors que lorsque j'appelle ce programme PHP à partir de mon navigateur, ça fonctionne (http://xxx.xxx.xxx.xxx/envoi_notification.php)
Il a donc bien installé un serveur web, et son fichier est à la racine de son serveur web
Donc le chemin indiqué dans crontab est erroné. En principe le chemin est: /var/www/envoi_notification.php
De plus sur certaines installations l' interpréteur php est situé en /usr/bin/php5 c'est le c'est le cas chez moi. Dans ce cas

Code : Tout sélectionner

*/5	* 	* 	* 	* 	/usr/bin/php5 /var/www/envoi_notification.php 
ou modifier le fichier comme suit:

Code : Tout sélectionner

#!/usr/bin/php5
<?php
echo date('j/m/Y H:i:s')."\n";
?>
et le rendre exécutable et voila le résultat:

Code : Tout sélectionner

[17:06:28]  michel@raspi-48:~/scripts$ ./test.php
25/11/2014 17:06:37
[17:06:37]  michel@raspi-48:~/scripts$

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 17:11
par mikebzh44
Oups, j'ai lu de travers.

En tout, cas, avec tes explications, ça devrait marcher.

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 18:17
par micsec
merci à vous 2
ça ne marche toujours pas, il doit y avoir un pb dans mon système, un pb de config ou autre ! C'est vrai que je débute en Linux...
j'ai saisi et essayé le petit prog php et lorsque je le lance j'ai l'erreur :
-bash: testphp.php : commande introuvable

Notez que j'ai lancé la commande dans /home/pi/

Je crois que je vais devoir me former un peu plus sur Linux !

Re: Configuration de la crontab

Posté : mar. 25 nov. 2014 18:37
par mike913
Ce qui compte se n'est pas ou tu te trouve mais ou se trouve ton script: envoi_notification.php
s'il est accessible par l' adresse http://adresseIPRaspi/envoi_notification.php c'est qu'il se trouve dans le répertoire /var/www/
dans putty essaye les 2 commandes suivantes:
1- /usr/bin/php5 /var/www/envoi_notification.php
2- /usr/bin/php /var/www/envoi_notification.php
et indique nous les messages d' erreurs.

et donne nous le contenu de ton fichier envoi_notification.php