Ik ben nieuw in het gebruik van cron job. Ik weet niet eens hoe ik het moet schrijven. Ik heb geprobeerd te zoeken op internet, maar ik begrijp het nog steeds niet goed. Ik wil een cron-job maken die mijn code elke minuut uitvoert. Ik gebruik PHP om het te maken. Het werkt niet.
Voorbeeld
run.php (Code die elke minuut wordt uitgevoerd)
<?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");
?>
Stel dat deze twee bestanden in dezelfde map staan.
Is de code die ik heb gedaan verkeerd? Als het fout is, vertel me dan alsjeblieft hoe ik het kan oplossen.
Antwoord 1, autoriteit 100%
Dit is de beste uitleg met code in PHP die ik tot nu toe heb gevonden:
http://code.tutsplus.com /tutorials/managing-cron-jobs-with-php–net-19428
Kortom:
Hoewel de syntaxis van het plannen van een nieuwe taak op het eerste gezicht misschien ontmoedigend lijkt, is het eigenlijk relatief eenvoudig te begrijpen als je het eenmaal hebt afgebroken. Een cron-taak heeft altijd vijf kolommen die elk een chronologische ‘operator’ vertegenwoordigen, gevolgd door het volledige pad en de uit te voeren opdracht:
* * * * * home/path/to/command/the_command.sh
Elk van de chronologische kolommen heeft een specifieke relevantie voor de planning van de taak. Ze zijn als volgt:
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.
Dus als iemand bijvoorbeeld een taak wil plannen voor 12.00 uur op de eerste dag van elke maand, ziet het er ongeveer zo uit:
0 0 1 * * home/path/to/command/the_command.sh
Als we een taak wilden plannen die elke zaterdag om 8.30 uur zou worden uitgevoerd, zouden we het als volgt schrijven:
30 8 * * 6 home/path/to/command/the_command.sh
Er zijn ook een aantal operators die kunnen worden gebruikt om het schema nog verder aan te passen:
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
Bezoek de link voor het volledige artikel, het legt uit:
- Wat is het formaat van de cronjob als je deze handmatig wilt invoeren/bewerken.
- Hoe PHP te gebruiken met SSH2-bibliotheek om te verifiëren als de gebruiker, welke crontab je gaat bewerken.
- Volledige PHP-klasse met alle benodigde methoden voor authenticatie, bewerken en verwijderen van crontab-items.
Antwoord 2, autoriteit 49%
Op dezelfde manier waarop u cron.php probeert uit te voeren, kunt u een ander PHP-script uitvoeren. U zult dit echter via de CLI-interface moeten doen.
#!/usr/bin/env php
<?php
# This file would be say, '/usr/local/bin/run.php'
// code
echo "this was run from CRON";
Voeg vervolgens een item toe aan de crontab:
* * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null
Als het run.php-script uitvoerbare machtigingen had, zou het direct in de crontab kunnen worden vermeld, ook zonder het /usr/bin/php-gedeelte. Het ‘env php’-gedeelte, in het script, zou het juiste programma vinden om de PHP-code daadwerkelijk uit te voeren. Dus, voor de ‘uitvoerbare’ versie – voeg uitvoerbare toestemming toe aan het bestand:
chmod +x /usr/local/bin/run.php
en voeg dan het volgende item toe aan crontab:
* * * * * /usr/local/bin/run.php &> /dev/null
Antwoord 3, autoriteit 16%
Toegevoegd aan Alister, kun je de crontab meestal (niet altijd het geval) bewerken door crontab -e in te voeren in een ssh-sessie op de server.
De sterren vertegenwoordigen (* betekent elk van deze eenheid):
[Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]
Je zou hier hier meer over kunnen lezen.
Antwoord 4, autoriteit 4%
Typ het volgende in de linux/ubuntu-terminal
crontab -e
selecteer een editor (soms vraagt het om de editor)
en dit om elke minuut te draaien
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
Antwoord 5
Dat kan afhankelijk zijn van uw webhost als u niet uw eigen inhoud host. Als uw webhost het maken van chrono-taken ondersteunt, hebben ze mogelijk een formulier dat u moet invullen waarmee u de frequentie kunt selecteren en het absolute pad naar het uit te voeren bestand kunt invoeren. Met mijn webhost (DreamHost) kan ik bijvoorbeeld aangepaste cron-taken maken door het absolute pad naar het bestand in te voeren en de frequentie te selecteren in een selectiemenu. Dit is misschien niet mogelijk voor uw server, in welk geval u de crontab rechtstreeks of via uw hostspecifieke methode moet bewerken.
Zoals Alister Bulman details hierboven, maak een PHP-bestand om uit te voeren met CLI (zorg ervoor dat u #!/usr/bin/env php
helemaal aan het begin van het bestand voor de <?php
tag. Dit zorgt ervoor dat de shell weet welk uitvoerbaar bestand moet worden aangeroepen bij het uitvoeren van de schrift.
Antwoord 6
Gebruik voor deze taak beter het project Cron in combinatie met de Linux-cronjob. Het stelt je in staat om runtimes in je PHP-code te configureren, achtergrondtaken te ondersteunen en is gemakkelijk te gebruiken.
Eerste stap roept elke minuut een PHP-script aan:
* * * * * /usr/local/bin/run.php &> /dev/null
Tweede stap gebruik het cron/cron-pakket om runtimes rechtstreeks in PHP te configureren.
$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'));
Je hebt de details voor het gebruik gevonden in de gekoppelde repository.
Antwoord 7
Open eerst je SSH-server met gebruikersnaam en wachtwoord en verander naar de standaard rootgebruiker (gebruiker met alle rechten) en volg dan de onderstaande stappen,
- voer het commando
crontab -l
in, nu zie je de lijst met
alle cronjobs. - voer
crontab -e
in, een bestand met alle cron-taken wordt
geopend. - Bewerk het bestand met je cronjob-schema als
min hr
en sla het bestand op.
dayofmonth month dayofweek pathtocronjobfile - Nu zie je een antwoord
crontab: installing new
controleer nu opnieuw de lijst met cronjobs die uw cronjob zal zijn
crontab
daar vermeld.
Antwoord 8
Er is een eenvoudige manier om dit op te lossen: je kunt het php-bestand elke 1 minuut door cron uitvoeren, en in het uitvoerbare bestand van php een “if”-statement maken om uit te voeren wanneer de tijd “nu” zoals dit is
<?/** 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 */
}
Antwoord 9
$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
shell_exec($command ." > /dev/null &");
}
Antwoord 10
Maak zo’n cronjob om elke minuut aan te werken
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
Antwoord 11
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;
}
}
Antwoord 12
waarom gebruik je geen curl?
logisch, als u het php-bestand uitvoert, voert u dat uit via url in uw browser.
het is heel eenvoudig als je curl uitvoert
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);
}