111 votes

Comment créer une tâche cron en utilisant PHP ?

Je suis novice dans l'utilisation des tâches cron. Je ne sais même pas comment l'écrire. J'ai essayé de faire des recherches sur Internet, mais je ne comprends toujours pas bien. Je veux créer une tâche cron qui exécutera mon code toutes les minutes. J'utilise PHP pour le créer. Cela ne fonctionne pas.

Exemple

exécuter.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.

Est-ce que le code que j'ai fait est mauvais ? Si c'est le cas, veuillez me dire comment le corriger.

75voto

Nikolay Ivanov Points 739

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

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

En bref :

Bien que la syntaxe de la programmation d'un nouveau travail puisse sembler intimidante à première vue, elle est en fait relativement simple à comprendre une fois que vous l'avez décomposée. Une tâche cron comporte 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 un rapport spécifique avec le calendrier de la tâche. Elles sont les suivantes :

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 l'on voulait programmer une tâche pour le premier jour de chaque mois à midi, cela ressemblerait à ceci :

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

Si nous voulions programmer une tâche à exécuter 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 le programme :

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 du cronjob si vous voulez le saisir/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 PHP complète avec toutes les méthodes nécessaires pour l'authentification, la modification et la suppression des entrées crontab.

39voto

Alister Bulman Points 12913

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 les droits d'exécution, il pourrait être listé directement dans la crontab, sans la partie /usr/bin/php également. La partie 'env php', dans le script, trouverait le programme approprié pour exécuter réellement le code PHP. Donc, pour la version 'exécutable' - ajoutez la permission exécutable au fichier :

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

et ensuite, ajoutez l'entrée suivante dans la crontab :

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

12voto

Big Ginger Nerd Points 198

Ajouté à Alister, vous pouvez modifier la crontab habituellement (ce n'est pas toujours le cas) en entrant crontab -e dans une session ssh sur le serveur.

Les étoiles représentent (* signifie toutes les unités de cette unité) :

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

Vous pourriez en savoir plus sur ici .

4voto

Kroods Points 750

Tapez ce qui suit dans le terminal linux/ubuntu

 crontab -e 

sélectionner un éditeur (parfois il demande l'éditeur) et ceci à exécuter pour chaque minute

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

4voto

user345168 Points 51

Mieux utiliser le projet Cron en combinaison avec le cronjob Linux pour cette tâche. Il vous permet de configurer les temps d'exécution dans votre code PHP, supporte les tâches en arrière-plan et est facile à utiliser.

Première étape : appeler un script PHP toutes les minutes :

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

Deuxième étape : utiliser le cron/cron Package permettant de configurer les temps d'exécution directement en PHP.

$deprecatedStatus = new ShellJob();
$deprecatedStatus->setCommand('cd /app && /usr/local/bin/php cron/updateDeprecatedStatus.php');
$deprecatedStatus->setSchedule(new CrontabSchedule('* * * * */2'));

$displayDate = new ShellJob();
$displayDate->setCommand('cd /app && /usr/local/bin/php cron/updateDisplayDate.php');
$displayDate->setSchedule(new CrontabSchedule('* * * * */5'));

Vous avez trouvé les détails de l'utilisation dans le référentiel lié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X