Estoy ejecutando un script PHP en un cronjob y quiero enviar correos electrónicos cada 5 minutos.
Mi trabajo cron actual (crontab):
10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
El cronmail.php es el siguiente:
<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("[email protected]", $subject, $message, "From: $from\n");
?>
Pero no he recibido un correo electrónico en 30 minutos con esta configuración.
cromail.php
ocronmail.php
?Respuestas:
En un
crontab
archivo, los campos son:Entonces:
significa ejecutar
blah
a los 10 minutos después de cada hora.Si desea cada cinco minutos, use:
es decir, cada minuto pero solo cada quinto, o:
para
cron
ejecutables más antiguos que no entienden la*/x
notación.Si aún parece que no funciona después de eso, cambie el comando a algo como:
y supervise ese archivo para asegurarse de que se escriba algo cada cinco minutos. Si es así, hay algún problema con sus scripts PHP. Si no es así, hay algún problema con tu
cron
daemon.fuente
Su CRON debería verse así:
*/5 * * * *
CronWTF es realmente útil cuando necesita probar su configuración CRON.
Podría ser una buena idea canalizar la salida a un archivo de registro para que pueda ver si su secuencia de comandos también arroja errores, ya que no los verá en su terminal.
También intente usar un shebang en la parte superior de su archivo PHP, para que el sistema sepa dónde encontrar PHP. Como:
#!/usr/bin/php
de esa manera puedes llamar a todo así
*/5 * * * * php /path/to/script.php > /path/to/logfile.log
fuente
Está configurando su cron para que se ejecute en el décimo minuto cada hora.
Para configurarlo para que
every 5 mins
cambie a*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1
fuente
usr/bin/php
parte faltante*/5 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Si desea ejecutar un cron cada
n
minuto, hay algunas opciones posibles según el valor den
.n
divide 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)Aquí, la solución es sencilla haciendo uso de la
/
notación:En lo anterior,
n
representa el valorn
ym
representa un valor menor quen
o*
. Esto ejecutará el comando en los minutosm,m+n,m+2n,...
n
NO divide 60Si
n
no divide 60, no puede hacerlo limpiamente con cron, pero es posible. Para hacer esto, necesita poner una prueba en el cron donde la prueba verifica la hora. Esto se hace mejor cuando se mira la marca de tiempo de UNIX, el total de segundos desde1970-01-01 00:00:00 UTC
. Digamos que queremos comenzar a ejecutar el comando la primera vez que Marty McFly llegó a Riverdale y luego repetirlo cadan
minutos más tarde.Para que un cronjob se ejecute cada
42
minuto después de `2015-10-21 07:28:00 ', el crontab se vería así:con
minutetestcmd
definido comoObservación: el tiempo UNIX no se ve afectado por los segundos intercalares
Observación:
cron
no tiene una precisión inferior a un segundofuente
m/n
notación no parece funcionar en mis sistemas (Debian 9, Ubuntu 16.04). Solo*/n
funciona. Por ejemplo,5/5
o4/10
cedaError: bad minute; while reading /etc/crontab
syslog (en Ubuntu con cron v. 3.0pl1-128ubuntu2). ¿Se ha abandonado esta notación m / n o solo está disponible en algunos sistemas?m-59/n
. Solo un rango puede tener un tamaño de paso. (verman 5 crontab
). He actualizado la respuesta2 pasos para verificar si un cronjob está funcionando:
Ejecute manualmente el comando php:
/ usr / bin / php /mydomain.in/cromail.php
Y verifique si se muestra algún error
fuente
Para establecer x minutos, necesitamos establecer x minutos en el primer argumento y luego la ruta de su script
Por 15 minutos
fuente