Hoe maak je een cron-job aan met PHP?

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.

voer hier de afbeeldingsbeschrijving in

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:

  1. Wat is het formaat van de cronjob als je deze handmatig wilt invoeren/bewerken.
  2. Hoe PHP te gebruiken met SSH2-bibliotheek om te verifiëren als de gebruiker, welke crontab je gaat bewerken.
  3. 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,

  1. voer het commando crontab -l in, nu zie je de lijst met
    alle cronjobs.
  2. voer crontab -e in, een bestand met alle cron-taken wordt
    geopend.
  3. Bewerk het bestand met je cronjob-schema als min hr
    dayofmonth month dayofweek pathtocronjobfile
    en sla het bestand op.
  4. Nu zie je een antwoord crontab: installing new
    crontab
    controleer nu opnieuw de lijst met cronjobs die uw cronjob zal zijn
    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);
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

ten − 7 =

Other episodes