sql >> Databasteknik >  >> RDS >> Mysql

schemalägga automatiskt körning av ett php-skript vid en viss tidpunkt

Du har 3 alternativ. Min rekommendation:Använd cron om du kan, användardriven om du måste och demon som en sista utväg.

(1) cron (som nämnts i kommentarerna)

cron är en schemaläggare för linux-system som kör ett kommandoradsjobb på ditt system. Du loggar in på din server över ssh, skriv crontab -e , och lägg till en rad så här:

4 5 * * * php /path/to/my/script.php

Detta skulle köra skriptet klockan 5:04 varje dag.

<?php
// /path/to/my/script.php

// Do something

Vissa värdtjänster tillåter att ange cron-jobb med ett GUI. Det finns också externa cron-tjänster som kommer att anropa en URL åt dig vid specifika tidpunkter.

(2) demon

Detta är det mest avancerade alternativet och även det minst pålitliga:Du kör ett kommandoradsskript som innehåller en oändlig loop. Skriptet kontrollerar sedan regelbundet status och svarar på det. Eftersom det sannolikt kraschar efter månader av körning, måste du ha ett andra skript för att starta om det om det skulle göra det. Detta är mycket arbete, men det är det mest flexibla tillvägagångssättet.

<?php



while (1) {   

  // fetch $last_exec_timestamp from database

  if ($last_exec_timestamp < time() + 86400) {
    // set last_exec_timestamp to now in database

    // do something
  }
  sleep(5);

}

3. användardriven

Om du har en anständig mängd trafik på din webbplats kan du helt enkelt inkludera jobbet detta i sidfoten, när det inte finns mer utdata. Se till att den här koden är snabb, annars väntar en oturlig användare på den.

<?php

// fetch $last_exec_timestamp from database

if ($last_exec_timestamp < time() + 86400) {
  // set last_exec_timestamp to now in database
  // do something
}

Det finns också mer tjusiga metoder för "användardriven" som jag inte personligen har testat i ett annat stackspill fråga .



  1. Hur skapar man en skrivskyddad MySQL-användare?

  2. Hur konfigurerar jag allocationSize inom persistence.xml istället för Entity

  3. SSIS-paket som körs i Serveragent fungerar inte (även när det rapporteras framgång)

  4. Anropa en lagrad procedur inom en lagrad procedur