reiniciar rango minutos manualmente instalar horas ejemplos ejecutar editar cada php cron cron-task

php - rango - ¿Cómo ejecutar un cronjob cada X minutos?



instalar crontab ubuntu (6)

2 pasos para verificar si un cronjob está funcionando:

  1. Inicie sesión en el servidor con el usuario que ejecuta el cronjob
  2. Ejecute manualmente el comando php:

    / usr / bin / php / mydomain.in/cromail.php

Y verifique si se muestra algún error

Estoy ejecutando un script PHP en un cronjob y quiero enviar correos electrónicos cada 5 minutos

Mi actual (crontab) cronjob:

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.


En un archivo crontab , los campos son:

  • minuto de la hora.
  • hora del día
  • día del mes.
  • mes del año.
  • día de la semana.

Entonces:

10 * * * * blah

significa ejecutar blah a los 10 minutos después de cada hora.

Si quieres cada cinco minutos, usa cualquiera de los siguientes:

*/5 * * * * blah

es decir, cada minuto pero solo cada quinto, o:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * blah

para ejecutables cron más antiguos que no entienden la notación */x .

Si todavía parece no funcionar después de eso, cambie el comando a algo como:

date >>/tmp/debug_cron_pax.txt

y supervise ese archivo para asegurarse de que se escriba algo cada cinco minutos. Si es así, hay algo mal con sus scripts PHP. Si no, hay algo mal con tu demonio cron .


Está configurando su cron para que se ejecute en el décimo minuto cada hora.
Para configurarlo every 5 mins cambie a */5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1


Si desea ejecutar un cron cada n minutos, hay algunas opciones posibles según el valor de n .

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 / :

# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) # | | | | | # * * * * * command to be executed m-59/n * * * * command

En lo anterior, n representa el valor n y m representa un valor menor que n o * . Esto ejecutará el comando en los minutos m,m+n,m+2n,...

n NO divide 60

Si n no divide 60, no puede hacerlo limpiamente con cron pero es posible. Para hacer esto, debe poner una prueba en el cron donde la prueba verifica la hora. Esto se hace mejor cuando se mira la marca de tiempo UNIX, el total de segundos desde 1970-01-01 00:00:00 UTC . Digamos que queremos comenzar a ejecutar el comando la primera vez cuando Marty McFly llegó a Riverdale y luego repetirlo cada n minutos más tarde.

% date -d ''2015-10-21 07:28:00'' +%s 1445412480

Para que un cronjob se ejecute cada 42 minutos después de `2015-10-21 07:28:00 '', el crontab se vería así:

# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) # | | | | | # * * * * * command to be executed * * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command

con minutetestcmd definido como

#!/usr/bin/env bash starttime=$(date -d "$1" "+%s") # return UTC time now=$(date "+%s") # get the amount of minutes (using integer division to avoid lag) minutes=$(( (now - starttime) / 60 )) # set the modulo modulo=$2 # do the test (( now >= starttime )) && (( minutes % modulo == 0 ))

Observación: el tiempo UNIX no está influenciado por los segundos bisiestos

Observación: cron no tiene una precisión inferior al segundo


Su CRON debería verse así:

*/5 * * * *

CronWTF es realmente útil cuando necesita probar su configuración CRON.

Puede ser una buena idea canalizar la salida en un archivo de registro para que pueda ver si su script también arroja algún error, 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 todo así

*/5 * * * * php /path/to/script.php > /path/to/logfile.log


# .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed

Para establecer x minutos necesitamos establecer x minutos en el primer argumento y luego la ruta de su script

Por 15 minutos

*/15 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1