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.
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.
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:
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
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 .
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
$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
Shell_exec($command ." > /dev/null &");
}
Créez un cronjob comme celui-ci pour travailler chaque minute
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
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 */
}
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);
}
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.
crontab -l
et vous verrez maintenant la liste de tous les cronjobs.crontab -e
un fichier contenant tous les travaux cron sera ouvert.min hr dayofmonth month dayofweek pathtocronjobfile
et enregistrez le fichier.crontab: installing new crontab
maintenant vérifier à nouveau la liste des tâches cron votre travail cron sera répertorié ici.