web-dev-qa-db-fra.com

Comment créer un travail cron en utilisant PHP?

Je commence à utiliser le travail cron. Je ne sais même pas comment l'écrire. J'ai essayé de chercher sur Internet, mais je ne le comprends toujours pas bien. Je veux créer un travail cron qui exécutera mon code toutes les minutes. J'utilise PHP pour le créer. Ça ne marche pas.

Exemple

run.php (Code qui sera exécuté toutes les minutes)

<?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");

?>

Supposons que ces deux fichiers se trouvent dans le même dossier.

Le code que j'ai fait est-il faux? Si vous vous trompez, dites-moi, s'il vous plaît, comment y remédier.

83
user2738520

C'est la meilleure explication avec du code dans PHP que j'ai trouvé jusqu'à présent:

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

En bref:

Bien que la syntaxe de planification d'un nouvel emploi puisse sembler décourageante à première vue, il est en fait relativement simple à comprendre une fois que vous l'avez décomposée. Un travail cron aura toujours cinq colonnes, chacune représentant un "opérateur" chronologique suivi du chemin complet et de la commande à exécuter:

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

Chacune des colonnes chronologiques a une pertinence particulière pour le calendrier de la tâche. Ils sont comme suit:

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

Ainsi, par exemple, si on voulait planifier une tâche pour 12h le premier jour de chaque mois, cela ressemblerait à ceci:

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

Si nous voulions planifier l'exécution d'une tâche tous les samedis à 8h30, nous l'écririons comme suit:

30 8 * * 6 home/path/to/command/the_command.sh

Il existe également un certain nombre d'opérateurs qui peuvent être utilisés pour personnaliser encore plus la planification:

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

Visitez le lien pour l'article complet, il explique:

  1. Quel est le format de la tâche cron si vous souhaitez la saisir/la modifier manuellement?.
  2. Comment utiliser PHP avec la bibliothèque SSH2 pour s'authentifier en tant qu'utilisateur, quelle crontab vous allez éditer.
  3. Classe complète PHP avec toutes les méthodes nécessaires pour l’authentification, la modification et la suppression des entrées de la crontab.
52
Nikolay Ivanov

De la même manière que vous essayez d’exécuter cron.php, vous pouvez exécuter un autre script PHP. Vous devrez cependant le faire via l'interface CLI.

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

Ensuite, ajoutez une entrée à la crontab:

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

Si le script run.php avait des autorisations exécutables, il pourrait être directement répertorié dans la crontab, sans la partie/usr/bin/php. La partie "env php" du script trouverait le programme approprié pour exécuter le code PHP. Donc, pour la version 'exécutable' - ajoutez une autorisation exécutable au fichier:

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

puis ajoutez l'entrée suivante dans crontab: 

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

Ajouté à Alister, vous pouvez généralement modifier la crontab (pas toujours le cas) en entrant crontab -e dans une session SSH sur le serveur.

Les étoiles représentent (* signifie chacune de ces unités):

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

Vous pouvez en lire davantage sur this here

10
Big Ginger Nerd

Tapez ce qui suit dans le terminal linux/ubuntu

 crontab -e 

sélectionnez un éditeur (il est parfois demandé à l'éditeur) et cela s'exécutera à chaque minute

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

$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
shubhi agrawal

Créez un cronjob comme celui-ci pour travailler chaque minute

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

Il existe un moyen simple de résoudre ce problème: vous pouvez exécuter le fichier php par cron toutes les minutes, et à l'intérieur du fichier exécutable php, l'instruction "if" à exécuter lorsque l'heure "maintenant" est la suivante

<?/** 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 */
}
0
maxkuku

pourquoi ne pas utiliser curl? logiquement, si vous exécutez un fichier php, vous l'exécuterez par url sur votre navigateur .

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);
}
0
Ecko Santoso

Commencez par ouvrir votre serveur SSH avec un nom d'utilisateur et un mot de passe et passez à l'utilisateur root par défaut (utilisateur avec toutes les autorisations), puis suivez les étapes ci-dessous.

  1. entrez la commande crontab -l et vous verrez maintenant la liste de tous les cronjobs.
  2. entrez crontab -e un fichier contenant tous les travaux cron sera ouvert.
  3. Modifiez le fichier avec votre planification cronjob en tant que min hr dayofmonth month dayofweek pathtocronjobfile et enregistrez le fichier.
  4. Maintenant, vous verrez une réponse crontab: installing new crontab maintenant vérifier à nouveau la liste des tâches cron votre travail cron sera répertorié ici.
0
Gokulpriya