Pourquoi est crontab pas l'exécution de mon script PHP?
J'ai construit un fichier php pour vérifier un résultat, de sorte que j'ai besoin de la configuration d'une tâche cron.
J'ai mis un pour exécuter toutes les 30 minutes, de sorte que les résultats seront à envoyer. Cependant, je ne sais pas pourquoi mon crontab ne pas courir après toutes les 30 minutes.
Voici comment j'ai réglé le crontab:
*/30 * * * * php /var/www/html/result.php
J'ai confirmé mon répertoire de fichier est correct. Ce que je n'est sûr sur le moment de la partie: n'est-il pas possible d'utiliser */30 * * * *
ou 30 * * * *
? J'ai mis */30 * * * *
et n'a pas de travail.
*/30 * * * *
va exécuter toutes les 30 minutes, alors que 30 * * * *
s'exécuter sur la 30e minute de chaque heure. Voici un [lien utile]('cyberciti.biz/faq/...), vous pouvez facilement google pour plus d'.Aussi, essayez d'exécuter
php -f /var/www/html/result.php
directement à partir de la ligne de commande et de voir ce genre de sortie que vous obtenez; si le résultat indique une erreur fatale, votre problème est probablement avec votre script PHP.OriginalL'auteur user941885 | 2011-09-13
Vous devez vous connecter pour publier un commentaire.
Donné
Il y a de multiples possibilités pour laquelle il n'est pas de travail:
Tout d'abord, il est important de vérifier si la simple exécution de
php /var/www/html/result.php
. Cela est nécessaire. Mais malheureusement, la réalisation cela ne signifie pas que le problème est résolu.Le chemin de la
php
binaire doit être ajouté.être modifié pour
ou que ce soit venant de
which php
.Vérifier l'autorisation du script de l'utilisateur qui exécute la crontab.
Donner la permission d'exécution sur le fichier:
chmod +x file
. Et assurez-vous que la crontab est lancé par un utilisateur ayant les droits pour exécuter le script. Vérifiez également si l'utilisateur peut accéder au répertoire dans lequel se trouve le fichier.Pour être plus sûr, vous pouvez également ajouter le php chemin en haut du script, tels que:
Assurez-vous que l'utilisateur dispose des droits d'utilisation de la crontab. Vérifier si il est dans le
/etc/cron.d/deny
fichier. Aussi, faire un test de base pour voir si c'est un crontanb ou php problème.Sortie le résultat du script dans un fichier journal, comme William Niu suggéré.
Utiliser le
-f
option pour exécuter le script:Pour résumer, il y a beaucoup de raisons possibles. L'un d'eux devrait résoudre le problème.
Vous pouvez également cocher la case "Débogage crontab" dans la section stackoverflow.com/tags/crontab/info
Une autre variante, peut-être n ° 8, peut être à cause des dépendances à l'intérieur de l' .fichier php (ça va passer tous les #1-#7 mais toujours pas de travail). Exemple: include 'config.inc.php'; Un moyen de corriger: 30 2 * * * cd /chemin/vers/phpfiles/; /usr/bin/php -q script.php
Pour moi, c'est le chemin du fichier de nom. C'est lorsque j'ai utilisé ".journal" dans le programme php, ça ne fonctionne pas. Cependant, après je l'ai corrigé dans un chemin d'accès complet du fichier dans le script, il a travaillé. "/home/quiconque/test/test.journal"
OriginalL'auteur fedorqui
Il est peut-être parce que php n'est pas dans le chemin.
crontab
a une très minimepath
. Donc, inclure le chemin complet de votre programme php.vous pouvez tester votre cron commandes par la tuyauterie de la sortie vers un fichier, par exemple
De cette page de référence, en vertu de la "Crontab de l'Environnement":
Aussi,
/30
syntaxe pourrait pas être pris en charge par toutes les plates-formes, donc, essayez de la modifier pour0,30
à la place.OriginalL'auteur William Niu
Eu un problème similaire; à partir de la ligne de commande, il a travaillé, mais à partir de cron, pas aller.
avait un "include ("./connect.php"); dans mon code php pour la db choses.
Enlevé, et a ajouté l'connect.php code directement dans le script php, et il a travaillé à partir de cron.
Vous avez juste résolu mon problème 🙂
Tu viens de résoudre la mienne aussi. J'ai inclus le chemin d'accès complet "connect.php" et cela a fonctionné.
OriginalL'auteur Willem Abrie
J'ai eu un problème similaire sur
Ubuntu 14.04.1
et le problème s'est avéré être la façon dont j'ai été la modification de la crontab:J'ai été en utilisant
sudo crontab -e
au lieu de simplementcrontab -e
ce qui a causé mes modifications pour être ignoré.sudo
. Si quoi que ce soit,sudo
devrait être l'un des utilisateurs qui peuvent faire ce qu'il veut.Je pense qu'en ajoutant sudo vous sélectionnez l'utilisateur root (les paramètres du cron de l'utilisateur root)
OriginalL'auteur nifo
J'ai eu une drôle au sujet de cette. Bien que mes scripts exécuter manuellement, ils ne courent pas de crontab.
S'avère que parce que le script a été exécuté à partir d'
/usr/bin/php
plutôt que l'emplacement du fichier (comme il le fait quand je le lance manuellement) mon phprequire
n'était pas de trouver les fichiers que je voulais. Changer pour refléter l'adresse complète fixe.dépannage en exécutant le script comme
/usr/bin/php -f /var/www/myfile.php
m'a aidé à trouver le problèmeOriginalL'auteur KingColours
Après une journée difficile de comprendre pourquoi mon script ne travaillent directement (pour envoyer des données dans un e-mail à un compte gmail), j'ai découvert que tous les délibérée envoie travaillé quand j'ai cliqué sur l'url et tous les cron envoie est allé dans le courrier indésirable. Aucune idée pourquoi, mais je pensais que je voudrais partager.
OriginalL'auteur Brian Jones
Willem réponse m'a montré le chemin. Dans mon cas, j'ai un "include("connection.php")" à l'intérieur de mon code. J'ai changé connection.php d' /my/full/path/connection.php. J'ai quelques rename() appels avec le chemin relatif, et j'ai changé le chemin d'accès absolu. Ce qui a fonctionné pour moi. J'espère que cela peut aider quelqu'un d'autre.
OriginalL'auteur Paulo
Facile et logique:
La vérification de la cron logs dans /var/log/cron vous donnera très utile info
Eg.,
Mon entrée cron est
* * * * * /usr/bin/php /cat.php
<== Run cat.php chaque minuteLe fichier journal doit contenir une entrée semblable à celui ci-dessous à chaque fois une entrée cron est exécuté
Ici, la commande php sera exécuté à chaque minute et il y aura une entrée dans le fichier journal toutes les minutes
Si l'entrée n'est pas là, crond est pas de même de la cueillette que la tâche cron. Si l'entrée de journal est là, et encore vous n'obtenez pas le résultat souhaité, puis il ya quelque chose de mal avec la commande/de l'application de la logique
OriginalL'auteur Siva Prakash
Êtes-vous sûr qu'il n'est pas en cours d'exécution? Si vous utilisez exec, réalisez que vous êtes l'exécution de cron et le chemin d'accès complet pour tout ce qui est nécessaire, donc au lieu de
cp
, vous aurez besoin d'utiliser/bin/cp
.OriginalL'auteur Trygve