J'exécute un script PHP dans un cronjob et je souhaite envoyer des e-mails toutes les 5 minutes
Mon cronjob actuel (crontab):
10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Le cronmail.php est le suivant:
<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("[email protected]", $subject, $message, "From: $from\n");
?>
Mais je n'ai pas reçu d'email depuis 30 minutes avec cette configuration.
cromail.php
oucronmail.php
?Réponses:
Dans un
crontab
fichier, les champs sont:Alors:
signifie exécuter
blah
à 10 minutes toutes les heures.Si vous voulez toutes les cinq minutes, utilisez soit:
c'est-à-dire toutes les minutes mais seulement toutes les cinq, ou:
pour les anciens
cron
exécutables qui ne comprennent pas la*/x
notation.Si cela semble toujours ne pas fonctionner après cela, changez la commande en quelque chose comme:
et surveillez ce fichier pour vous assurer que quelque chose est écrit toutes les cinq minutes. Si tel est le cas, il y a un problème avec vos scripts PHP. Sinon, il y a un problème avec votre
cron
démon.la source
Votre CRON devrait ressembler à ceci:
*/5 * * * *
CronWTF est vraiment utile lorsque vous devez tester vos paramètres CRON.
Cela peut être une bonne idée de diriger la sortie dans un fichier journal afin que vous puissiez voir si votre script génère également des erreurs - car vous ne les verrez pas dans votre terminal.
Essayez également d'utiliser un shebang en haut de votre fichier PHP, afin que le système sache où trouver PHP. Tel que:
#!/usr/bin/php
comme ça tu peux appeler tout ça comme ça
*/5 * * * * php /path/to/script.php > /path/to/logfile.log
la source
Vous configurez votre cron pour qu'il s'exécute à la 10e minute par heure.
Pour le configurer pour qu'il
every 5 mins
devienne*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1
la source
usr/bin/php
partie manquante*/5 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Si vous souhaitez exécuter un cron toutes les
n
minutes, il existe quelques options possibles en fonction de la valeur den
.n
divise 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)Ici, la solution est simple en utilisant la
/
notation:Dans ce qui précède,
n
représente la valeurn
etm
représente une valeur inférieure àn
ou*
. Cela exécutera la commande aux minutesm,m+n,m+2n,...
n
ne divise PAS 60Si
n
ne divise pas 60, vous ne pouvez pas le faire proprement avec cron, mais c'est possible. Pour ce faire, vous devez mettre un test dans le cron où le test vérifie l'heure. Cela est mieux fait lorsque vous regardez l'horodatage UNIX, le nombre total de secondes depuis1970-01-01 00:00:00 UTC
. Disons que nous voulons commencer à exécuter la commande la première fois lorsque Marty McFly est arrivé à Riverdale, puis la répéter toutes lesn
minutes plus tard.Pour qu'un cronjob s'exécute toutes les
42
nd minutes après `2015-10-21 07:28:00 ', le crontab ressemblerait à ceci:avec
minutetestcmd
défini commeRemarque: l' heure UNIX n'est pas influencée par les secondes intercalaires
Remarque:
cron
n'a pas de précision inférieure à la secondela source
m/n
notation ne semble pas fonctionner sur mes systèmes (Debian 9, Ubuntu 16.04). Fonctionne seulement*/n
. Par exemple,5/5
ou4/10
donnezError: bad minute; while reading /etc/crontab
dans syslog (dans Ubuntu avec cron v. 3.0pl1-128ubuntu2). Cette notation m / n a-t-elle été abandonnée ou n'est-elle disponible que dans certains systèmes?m-59/n
. Seule une plage peut avoir une taille de pas. (voirman 5 crontab
). J'ai mis à jour la réponse2 étapes pour vérifier si un cronjob fonctionne:
Exécutez manuellement la commande php:
/ usr / bin / php /mydomain.in/cromail.php
Et vérifiez si une erreur est affichée
la source
Pour définir pendant x minutes, nous devons définir x minutes dans le 1er argument, puis le chemin de votre script
Pendant 15 minutes
la source