sql >> Databáze >  >> RDS >> Mysql

automaticky naplánovat spuštění skriptu php v konkrétní čas

Máte 3 možnosti. Moje doporučení:Pokud můžete, použijte cron, pokud musíte, použijte démona a jako poslední možnost použijte démona.

(1) cron (jak je uvedeno v komentářích)

cron je plánovač pro linuxové systémy, který na vašem systému spustí úlohu příkazového řádku. Přihlásíte se k serveru přes ssh, zadejte crontab -e a přidejte řádek jako tento:

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

Tím by se skript spustil každý den v 5:04.

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

// Do something

Některé hostingové služby umožňují zadávání úloh cronu pomocí GUI. Existují také externí cron služby, které za vás zavolají URL v určitých časech.

(2) démon

Toto je nejpokročilejší možnost a také nejméně spolehlivá:Spustíte skript příkazového řádku, který obsahuje nekonečnou smyčku. Skript pak pravidelně kontroluje stav a reaguje na něj. Protože je pravděpodobné, že se po měsících běhu zhroutí, musíte mít druhý skript, abyste jej restartovali v případě, že k němu dojde. Je to hodně práce, ale je to nejflexibilnější přístup.

<?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. řízeno uživatelem

Pokud máte na svém webu slušnou návštěvnost, můžete jednoduše zahrnout úlohu toto do zápatí stránky, když již není k dispozici žádný výstup. Ujistěte se, že je tento kód rychlý, jinak na něj bude čekat nešťastný uživatel.

<?php

// fetch $last_exec_timestamp from database

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

Existují také efektnější přístupy „řízené uživatelem“, které jsem osobně netestoval v jiném přetečení zásobníku otázka .



  1. jak můžeme volat proceduru store v klauzuli where

  2. T-sql, ticks, časové razítko

  3. Založení databázových modelů v realitě:Výzva pro bloggery

  4. Volání REST API ze spouštěče nebo uložené procedury v mysql?