Je veux vérifier si une certaine crontab fonctionne correctement. J'ai ajouté un travail comme celui-ci:
*/2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1
Je sais que je redirige vers le périphérique null, mais je ne sais pas si la commande ci-dessus est bonne.
* Edit 1: Dans mon/var/log/syslog toutes les deux minutes, j'ai l'erreur suivante:
(CRON) error (grandchild #2788 failed with exit status 2)
* Edit 2: Aucune erreur dans les journaux avec ce nouveau travail:
*/2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
La syntaxe de l'entrée crontab semble correcte. En effet, si vous modifiez votre crontab à l'aide de "crontab -e
" (comme il se doit), vous obtiendrez une erreur si vous spécifiez quand même une entrée de crontab syntaxiquement invalide.
Tout d'abord, /path_to_my_php_script/info.php
s'exécute-t-il correctement à partir de la ligne de commande?
Si oui, fonctionne-t-il correctement comme ceci ?:
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
Si ça marche, ça marche comme ça?
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
L'étape (3) est similaire à la façon dont cron exécutera votre programme (comme indiqué dans "man 5 cron".
Le problème le plus probable que vous rencontrez est que le PATH utilisé par cron pour exécuter votre programme est trop restrictif. Par conséquent, vous souhaiterez peut-être ajouter quelque chose comme ceci en haut de votre entrée dans la crontab (vous devrez ajouter les répertoires dont votre script aura besoin):
PATH=~/bin:/usr/bin/:/bin
Notez également que cron utilisera par défaut /bin/sh
, pas bash. Si vous avez besoin de bash, ajoutez également ceci au début de votre fichier crontab:
Shell=/bin/bash
Notez que ces deux modifications affecteront tous les entrées de la crontab. Si vous souhaitez simplement modifier ces valeurs pour votre programme info.php
, vous pouvez procéder de la manière suivante:
*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"
Il est également intéressant de noter que sur un système configuré pour "mail" (en d'autres termes, un système sur lequel un MTA est configuré [sendmail/postfix/etc]), toutes les sorties des programmes crontab vous sont envoyées automatiquement par courrier électronique. La messagerie locale ne sera pas configurée sur un système de bureau Ubuntu par défaut, mais si vous travaillez sur un serveur, vous pouvez simplement taper "mail" dans un terminal pour voir tous ces courriers cron. Ceci s'applique également à la commande "at
".
Bien que très rare, cron cesse parfois de fonctionner correctement même si le service est en cours d'exécution. Voici comment vérifier que crond est en cours d'exécution et arrêter/démarrer le service.
Sous Linux:
service crond status
service crond stop
service crond start
Sur Ubuntu:
service cron status
service cron stop
service cron start
Ne redirigez pas la sortie d'erreur vers/dev/null et grep/var/log/syslog pour la sortie cron.
grep cron /var/log/syslog
Vous pouvez immédiatement afficher les erreurs lors de l'enregistrement d'un fichier après l'édition de /etc/crontab
ou de fichiers à l'intérieur de /etc/cron.d/
avec:
tail -f /var/log/syslog | grep cron &
Si l'édition est correcte, vous ne verrez que l'avis RELOAD
, des erreurs se produiront comme
Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new
Vous pouvez voir votre cron actif avec la commande terminal:
crontab -l
Voici les paramètres dans l'ordre:
min (0 - 59)
heure (0 - 23)
jour du mois (1 - 31)
mois (1 - 12)
jour de la semaine (0 - 6) (dimanche = 0)
commander
Donc, vous appelez votre script à la première minute de chaque heure. Vous devez tester votre sortie à des intervalles plus fréquents à des fins de test:
* * * * * <command> #Runs every minute
Cela va l'appeler chaque minute!
Pour la partie horaire de chaque ligne, vous pouvez utiliser ceci testeur de cron pour tester/vérifier votre définition de temps cron.
Je pense que vous pouvez également utiliser run-parts
pour exécuter des tâches cron en dehors du groupe. C’est en fait ce que cron utilise pour exécuter les tâches périodiques, donc en fournissant les arguments appropriés, vous pouvez les exécuter à tout moment.
Si vous souhaitez uniquement exécuter un fichier à la place de tous les travaux cron définis dans, par exemple, /etc/cron.daily
, vous devrez fournir l'argument regex avec une expression rationnelle valide. run-parts --list --regex '^p.*d$' /etc
N'oubliez pas que les tâches cron sont généralement nommées sans extension et marquées comme exécutables. Assurez-vous donc que vos scripts sont similaires, bien que l'utilisation d'une expression régulière puisse vous permettre de déclencher un script avec une extension.
ah !!
j'ai eu la réponse moi-même, j'ai vérifié et je n'ai pas trouvé crond
dans le répertoire d'installation par défaut i.e /etc/init.d/
va maintenant essayer de répondre.
note - J'ai aussi vérifié le cron.allow
, cron.deny
. Tout va bien jusqu'à présent.