Quanto è fattibile un demone scritto in PHP, usando ignore_user abort e set_time_limit (0)

StackOverflow https://stackoverflow.com/questions/1006891

  •  06-07-2019
  •  | 
  •  

Domanda

Sto scherzando con i demoni e mi chiedo quanto sia fattibile (in termini di memoria, utilizzo della CPU e affidabilità) farlo usando PHP:

<?php
// Ignore user aborts and allow the script
// to run forever
ignore_user_abort(true);
set_time_limit(0);

$fp = fopen('loop.log', 'w');
fwrite($fp, date('Y-m-d H:i:s') . ' Started' . PHP_EOL);
while(1) {
    fwrite($fp, date('Y-m-d H:i:s') . ' Looped' . PHP_EOL);
    if (file_exists('loop.stop')) {
        break;
    }
    // Sleep for 100 seconds
    sleep(100);
}
fwrite($fp, date('Y-m-d H:i:s') . ' Stopped' . PHP_EOL);
fclose($fp);

Questo semplice esempio (adattato dal manuale di PHP per ignore_user_abort ) è solo lo script del contenitore. La funzionalità effettiva verrà inserita nel ciclo mentre .

Ho questo script in esecuzione sul mio laptop da 7 ore ormai, e sembra a posto, ma non fa molto. Qualcun altro ha provato questo?

È stato utile?

Soluzione

Tendo a mettere il ciclo in uno script BASH, in modo che tutte le risorse PHP vengano regolarmente ripulite.

#!/bin/bash
clear
date

php -f doChecksAndAct.php
sleep 100
# rerun myself
exec <*>

Se stavi eseguendo attività particolarmente pesanti da installare nello script PHP, potresti anche inserire un piccolo ciclo (ish) lì dentro (diciamo 50-100 iterazioni, se non fossero in pausa più secondi tra di loro) per ridurre il tempo di sovraccarico totale tra le esecuzioni.

Aggiunta: ho scritto un blog su un accoppiamento Bash / PHP (o altra lingua) in modo da poter eseguire facilmente il loop nello script PHP, quindi uscire per riavviare immediatamente o mettere in pausa per un po ' - Lavorare altrove - Barra laterale che esegue il lavoratore .

Altri suggerimenti

Lo sconsiglio.

C'è un bug aperto 4 anni fa che dice Memoria allocata per gli oggetti creati nell'oggetto i metodi non sono stati rilasciati .

Gli sviluppatori considerano questa una richiesta di funzionalità ma è molto difficile aggirare il problema quando si utilizzano processi di lunga durata. Ci ho provato, ma sono stato estremamente sollevato quando sono stato in grado di ritirare l'applicazione.

vale la pena dare un'occhiata anche al demone server sonico

http://dev.pedemont.com/sonic

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top