Pregunta ¿Cómo crear un trabajo cron usando PHP?


Soy nuevo en el uso de cron job. Ni siquiera sé cómo escribirlo. Intenté buscar desde Internet, pero todavía no lo entiendo bien. Quiero crear un trabajo cron que ejecutará mi código cada minuto. Estoy usando PHP para crearlo. No está trabajando.

Ejemplo

run.php  (Código que se ejecutará cada minuto)

<?php

echo "This code will run every minute";

?>

cron.php

<?php

$path = dirname(__FILE__);
$cron = $path . "/run.php";
echo exec("***** php -q ".$cron." &> /dev/null");

?>

Supongamos que estos dos archivos están en la misma carpeta.

Es el código que hice mal? Si es incorrecto, por favor tenga la amabilidad de decirme cómo solucionarlo.


74
2017-09-11 09:27


origen


Respuestas:


Esta es la mejor explicación con código en PHP que he encontrado hasta ahora:

http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

En breve:

Aunque la sintaxis de programar un nuevo trabajo puede parecer desalentadora a primera vista, en realidad es relativamente simple de entender una vez que se descompone. Un trabajo cron siempre tendrá cinco columnas, cada una de las cuales representa un "operador" cronológico seguido de la ruta completa y el comando para ejecutar:

* * * * * home / path / to / command / the_command.sh

Cada una de las columnas cronológicas tiene una relevancia específica para el cronograma de la tarea. Ellos son los siguientes:

Minutes represents the minutes of a given hour, 0-59 respectively.
Hours represents the hours of a given day, 0-23 respectively.
Days represents the days of a given month, 1-31 respectively.
Months represents the months of a given year, 1-12 respectively.
Day of the Week represents the day of the week, Sunday through Saturday, numerically, as 0-6 respectively.

enter image description here

Entonces, por ejemplo, si uno quisiera programar una tarea para las 12 a.m. del primer día de cada mes, se vería algo como esto:

0 0 1 * * home / path / to / command / the_command.sh

Si quisiéramos programar una tarea para que se ejecute todos los sábados a las 8:30 am, la escribiríamos de la siguiente manera:

30 8 * * 6 home / ruta / a / comando / the_command.sh

También hay una serie de operadores que se pueden utilizar para personalizar aún más el calendario:

Commas is used to create a comma separated list of values for any of the cron columns.
Dashes is used to specify a range of values.
Asterisksis used to specify 'all' or 'every' value

Visite el enlace para ver el artículo completo, explica:

  1. ¿Cuál es el formato del cronjob si desea ingresarlo / editarlo manualmente?
  2. Cómo usar PHP con la biblioteca SSH2 para autenticarse como usuario, qué crontab va a editar.
  3. Clase PHP completa con todos los métodos necesarios para autenticación, edición y eliminación de entradas crontab.

46
2017-07-08 06:32



De la misma manera que intentas ejecutar cron.php, puedes ejecutar otro script PHP. Sin embargo, tendrá que hacerlo a través de la interfaz CLI.

#!/usr/bin/env php
<?php
# This file would be say, '/usr/local/bin/run.php'
// code
echo "this was run from CRON"

Luego, agrega una entrada al crontab:

* * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null

Si el script run.php tiene permisos ejecutables, se puede enumerar directamente en el crontab, sin la parte / usr / bin / php también. La parte 'env php' del script encontraría el programa apropiado para ejecutar realmente el código PHP. Entonces, para la versión 'ejecutable', agregue permisos ejecutables al archivo:

chmod +x /usr/local/bin/run.php

y luego agregue la siguiente entrada en crontab:

* * * * * /usr/local/bin/run.php &> /dev/null

28
2017-09-11 09:37



Agregado a Alister, puede editar el crontab generalmente (no siempre el caso) ingresando crontab -e en una sesión ssh en el servidor.

Las estrellas representan (* significa cada una de esta unidad):

[Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]

Puedes leer un poco más sobre esto aqui.


10
2017-09-11 09:47



Hay una forma simple de resolver esto: puedes ejecutar el archivo php por cron cada 1 minuto, y dentro del archivo ejecutable php hacer la instrucción "if" para ejecutar cuando el tiempo "ahora" como este

<?/** suppose we have 1 hour and 1 minute inteval 01:01 */

$interval_source = "01:01";
$time_now = strtotime( "now" ) / 60;
$interval = substr($interval_source,0,2) * 60 + substr($interval_source,3,2);


if( $time_now % $interval == 0){
/** do cronjob */
}

3
2018-03-11 08:25



Escriba lo siguiente en la terminal de linux / ubuntu

 crontab -e 

seleccione un editor (alguna vez se lo pide al editor) y esto para correr por cada minuto

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null

1
2018-04-09 05:08



function _cron_exe($schedules) {
        if ($obj->get_option('cronenabledisable') == "yes") {
            // $interval = 1*20;
            $interval = $obj->get_option('cronhowtime');
            if ($obj->get_option('crontiming') == 'minutes') {
                $interval = $interval * 60;
            } else if ($obj->get_option('crontiming') == 'hours') {
                $interval = $interval * 3600;
            } else if ($obj->get_option('crontiming') == 'days') {
                $interval = $interval * 86400;
            }
            $schedules['hourlys'] = array(
                'interval' => $interval,
                'display' => 'cronjob'
            );
            return $schedules;
        }

}

1
2018-01-14 06:00



¿Por qué no usas Curl? lógicamente, si ejecuta el archivo php, lo ejecutará por url en su navegador. es muy simple si ejecuta curl

while(true)
{
    sleep(60); // sleep for 60 sec = 1 minute

    $s = curl_init();
    curl_setopt($s,CURLOPT_URL, $your_php_url_to_cron); 
    curl_exec($s); 
    curl_getinfo($s,CURLINFO_HTTP_CODE); 
    curl_close($s);
}

1
2017-11-01 17:25



$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
shell_exec($command ." > /dev/null &");
}


1
2018-02-05 07:04