Dans la mesure du possible, un démon écrit en PHP, utilisant ignore_user abort et set_time_limit (0)

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

  •  06-07-2019
  •  | 
  •  

Question

Je me moque des démons, et je me demande s’il est faisable (en termes d’utilisation de la mémoire et du processeur, et de fiabilité) d’utiliser 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);

Cet exemple simple (adapté du manuel PHP pour ignore_user_abort ) est juste le script de conteneur. La fonctionnalité réelle sera placée dans la boucle while .

Ce script est en cours d’exécution sur mon ordinateur portable depuis 7 heures et il a l’air beau, mais il ne fait pas grand chose. Quelqu'un d'autre a-t-il essayé?

Était-ce utile?

La solution

J'aurais tendance à mettre la boucle dans un script BASH pour que toutes les ressources PHP soient régulièrement nettoyées.

#!/bin/bash
clear
date

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

Si vous exécutez des tâches particulièrement lourdes à configurer dans le script PHP, vous pouvez également y insérer une petite boucle (ish) (par exemple, 50 à 100 itérations, si elles ne sont pas suspendues plusieurs secondes). réduire le temps système total entre les exécutions.

Ajout: j'ai blogué sur une association Bash / PHP (ou autre langue) afin que vous puissiez très facilement boucler dans le script PHP, puis quitter pour redémarrer immédiatement ou faire une pause pendant un certain temps - Faire le travail ailleurs - Barre latérale exécutant le travailleur .

Autres conseils

Je recommande contre.

Un bogue a été ouvert il y a 4 ans. Il indique la mémoire allouée aux objets créés dans l'objet. Méthodes n'est pas publié .

Les développeurs considèrent cela comme une demande de fonctionnalité , mais il est très difficile de la contourner lorsque vous utilisez des processus longs. J'ai essayé mais j'ai été extrêmement soulagé de pouvoir retirer l'application.

Le démon de serveur sonic pourrait également valoir la peine d'être vérifié

http://dev.pedemont.com/sonic

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top