Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Planen Sie automatisch die Ausführung eines PHP-Skripts zu einer bestimmten Zeit

Sie haben 3 Möglichkeiten. Meine Empfehlung:Verwenden Sie cron, wenn Sie können, benutzergesteuert, wenn Sie müssen, und Daemon als letzten Ausweg.

(1) cron (wie in den Kommentaren erwähnt)

cron ist ein Scheduler für Linux-Systeme, der einen Befehlszeilenjob auf Ihrem System ausführt. Sie melden sich über ssh bei Ihrem Server an und geben crontab -e ein , und fügen Sie eine Zeile wie diese hinzu:

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

Dies würde das Skript jeden Tag um 5:04 Uhr ausführen.

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

// Do something

Einige Hosting-Dienste erlauben die Eingabe von Cron-Jobs mit einer GUI. Es gibt auch externe Cron-Dienste, die zu bestimmten Zeiten eine URL für Sie aufrufen.

(2) Daemon

Dies ist die fortschrittlichste Option und auch die am wenigsten zuverlässige:Sie führen ein Befehlszeilenskript aus, das eine Endlosschleife enthält. Das Skript überprüft dann regelmäßig den Status und antwortet darauf. Da es nach monatelanger Ausführung wahrscheinlich abstürzt, müssen Sie ein zweites Skript haben, um es neu zu starten, falls dies der Fall ist. Das ist viel Arbeit, aber es ist der flexibelste Ansatz.

<?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. benutzergesteuert

Wenn Sie eine anständige Menge an Traffic auf Ihrer Website haben, können Sie den Job this einfach in die Fußzeile Ihrer Seite einfügen, wenn keine Ausgabe mehr erfolgt. Stellen Sie sicher, dass dieser Code schnell ist, oder ein unglücklicher Benutzer wird darauf warten.

<?php

// fetch $last_exec_timestamp from database

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

Es gibt auch ausgefallenere Ansätze von "benutzergesteuert", die ich nicht persönlich in einem anderen Stapelüberlauf getestet habe Frage .