1 votes

Exécution de php en tant que sudo à l'intérieur de crontab

J'ai écrit un script PHP, et l'exécution nécessite des permissions sudo, car il exécute d'autres éléments système. Donc j'ai ajouté cela dans le crontab -e, mais je ne vois pas que mon script s'exécute correctement.

Commande :

*/5 * * * * /usr/bin/php /srv/www/php/script.php && date > /srv/www/php/mylog.log

La seule sortie est la date. Aucune réponse de mon script. Il est exécutable (chmod a+x) et si j'utilise la même commande dans le terminal en tant que root, tout va bien. Donc c'est lié à crontab -e ?

J'ai également vérifié que mon travail cron tourne (/var/log/syslog) :

Oct 23 16:40:01 $MYMACHINE CRON[13797]: (root) CMD (/usr/bin/php /srv/www/php/script.php && date > /srv/www/php/mylog.log)

Et cela toutes les 5 minutes. De plus, mon "mylog.log" a toujours le dernier horodatage, donc je suppose qu'il doit y avoir un problème avec le script à l'intérieur.

ÉDITION : J'ai créé un autre script de test pour vérifier si les scripts s'exécutent ou non. Mais le script a été exécuté, donc c'est un problème à l'intérieur du script.

J'essaie d'ajouter dynamiquement des IPs à une chaîne iptables :

#!/bin/bash
valeur=`cat whitelist.txt`
#echo "$valeur"

for i in $(echo $valeur | tr "," "\n")
do
  # process
  /sbin/iptables -I teamspeakCommunication --src $i -j ACCEPT
done

Pouvez-vous voir quelque chose d'étrange ?

0 votes

@AD7six s'il vous plaît voir ma modification :)

0 votes

Eh bien, j'étais en train d'écrire une réponse basée sur le format erroné de votre ligne de cron, mais depuis lors, vous avez modifié votre question pour qu'elle ressemble à ce qu'elle devrait être. Aviez-vous le format initial dans votre crontab ou celui que vous avez actuellement dans la question?

0 votes

Oui, excusez-moi. J'ai modifié à l'intérieur de mon Crontab -e. De plus, le journal des erreurs php est vide. Mais je doute vraiment que le problème ne soit pas php combiné à sudo. J'ai ajouté la commande en tant que root.

1voto

Stefano Martins Points 1121

Ajoutez-le à votre fichier /etc/crontab comme ceci :

*/5 * * * * root /usr/bin/php /srv/www/script.php && date > /srv/www/php/mylog.log

Si la première ligne de votre script est #!/usr/bin/php et qu'il a la permission d'exécution, vous pouvez l'appeler directement comme n'importe quel autre script, comme ceux écrits en bash, perl, etc...

Cordialement!

0 votes

Jolie suggestion! Mais j'ai transféré toute ma logique dans un script bash maintenant, et l'ai ajoutée dans le /etc/crontab - comme votre ligne. Mais le script shell ne s'exécutera pas non plus?

0 votes

A-t-il l'autorisation d'exécution? De plus, pourquoi ne pas essayer de mettre la redirection également dans votre script bash? Que dit /var/log/syslog maintenant? Il devrait fonctionner, mais comme ce n'est pas le cas, je vous suggère de le déboguer en envoyant la sortie de chaque commande dans un fichier texte...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X