exec() - PHP - Programmation
Marsh Posté le 11-05-2005 à 11:10:55
et quand tu l'exécutes à la main ton crontab -l, tu as quelquechose?
Marsh Posté le 11-05-2005 à 11:11:48
Et si tu essaye ca "/usr/bin/crontab -l | cat "
Tu as quelque chose en retour ?
C'est peut-etre une histoire de buffer de sortie.
Marsh Posté le 11-05-2005 à 11:12:03
ReplyMarsh Posté le 11-05-2005 à 11:13:40
cerel a écrit : Et si tu essaye ca "/usr/bin/crontab -l | cat " |
ça marche pas non plus. J'ai également essayé de rediriger la sortie vers un fichier mais c'est pareil.
Marsh Posté le 11-05-2005 à 11:34:08
Euhhh, au fait, quand tu executes tes commandes via php, c'est l'user avec lequel apache a ete lance qui les execute.
Donc c'est l'user "www-data" normalement, donc faut verifier que cet user a acces a cron.
Tu peux essayer ca :
"su www-data" (en tant que root, ca te permet de te "loguer" en tant que l'user www-data, apres tu peux essayer de voir si ta commande fonctionne).
Ce qui se passe, c'est que il y a peut-etre une erreur qui s'affiche, mais lors de nos tests on ne redirigeait que la sortie standard et non la sortie d'erreur.
Marsh Posté le 11-05-2005 à 11:35:58
qq soit le user, le shell_exec/exec ne renvoi pas dans ce cas un message d'erreur ?? (style : permission denied)
Marsh Posté le 11-05-2005 à 11:41:18
Si un message est envoye, ce dernier risque d'etre envoye sur la sortie d'erreur, qui n'est pas la meme que la sortie standard.
La console a tendance a afficher la sortie standard et la sortie erreur a la fois, donc du coup on se rend pas forcement compte que c'est deux choses separees.
Marsh Posté le 11-05-2005 à 11:49:53
cerel a écrit : Euhhh, au fait, quand tu executes tes commandes via php, c'est l'user avec lequel apache a ete lance qui les execute. |
nORKy a écrit : qq soit le user, le shell_exec/exec ne renvoi pas dans ce cas un message d'erreur ?? (style : permission denied) |
l'utilisateur www-data n'existe pas.
si l'utilisateur n'existe pas, une ligne s'affiche disant "no crontab for utilisateur".
Donc dans tous les cas je devrais avoir un message, mais meme en redirigeant la sortie d'erreur (en écrivant : /usr/bin/crontab -l >& ~moi/test.txt) ça ne marche pas. le fichier n'est même pas créé.
Marsh Posté le 11-05-2005 à 16:17:22
La "non creation" du fichier est encore un probleme de droits.
As-tu modifie les droits de ton repertoire afin d'autoriser l'ecriture pour tout le monde ? Si c'est pas le cas, tu ne pourra pas creer le fichier.
Le mieux dans ce genre de cas c'est d'utiliser "/tmp", ce repertoire est prevu pour ce genre de choses, et normalement n'importe qui peut ecrire dedans.
Alors essaye de creer le fichier la dedans.
[edit]
Apres un rapide test sur ma debian, j'ai ca :
$ crontab -u www-data -l &> /tmp/test_err |
test_err est cree et contient le message d'erreur
test_std est bien cree, mais ne contient rien
Par consequent le message s'affiche dans stderr, donc si l'user ne possede pas de crontab, c'est normal que l'exec via php ne donne rien en retour.
[/edit]
Marsh Posté le 11-05-2005 à 11:09:38
bonjour za vous !
j'ai besoin d'éxecuter un commande unix dans le script que je lance en ligne de commande, je fais donc :
mais rien ne s'affiche. par contre quand je fais la même chose mais en mettant $cmd="ls -l", ça m'affiche bien le contenu du répertoire...
j'ai également essayé avec exec()... mais toujours la mm chose
une idée ??
Message édité par andlio le 11-05-2005 à 11:11:43