On Thu, 2010-02-11 at 06:46 +0000, Jochem Maas wrote:
> Op 2/11/10 6:34 AM, Teus Benschop schreef:
> > On Thu, 2010-02-11 at 05:53 +0000, Jochem Maas wrote:
> >> whatever it is that your trying to do, it sounds like one of two things:
> >>
> >> 1. you have hosting that is unsuitable for your needs
> >> 2. you are tackling the problem incorrectly
> >>
> >> at any rate, as far I'm concerned, you should never have a long running
> >> php process via a web server. (obviously this is the point that someone
> >> posts a brilliant use case to prove me wrong ;-)
> >>
> >> could you detail what is is you're actuallt trying to do, chances are 
> >> people
> >> have:
> >>
> >> a. got a better alternative
> >> b. already invented the particular wheel you're trying to build
> >> c. you really do need shell (or even just control panel) access to run a 
> >> cron job
> >>
> > 
> > What I am trying to achieve is to have a php script run once a minute
> > and do a few tasks. There are some constraints:
> > - Users usually install the php application on their local machines, be
> > it Linux, Windows, or Macintosh.
> > - The application is defined as needing zero-configuration, i.e. it runs
> > out of the box.
> 
> much too vague. no mention of a webserver ... zero-config and needing to 
> install
> are somewhat mutually exclusive.
> 
> I still have the feeling you're using the wrong tool for the job somehow,
> I may be wrong or drunk or both ;)

Well, on the web server, this usually would be Apache, though one user
indicated he would use some light httpd instead. Then, of course, yes,
installation is not zero-config, but what I mean is that after
installation no further configuration steps would be needed, e.g. if the
user unpacks a tarball in the web root, it should run straightaway, or
if he does 'apt-get install <pacakge>', no further configuration would
be needed. I thought therefore that using visitors page requests was a
clever way of initiating starting a php script. At the moment I've got
the following code:

$crontable = Database_Cron::getInstance ();
if ($crontable->getFlag ()) die;
$crontable->setFlag ();
ignore_user_abort(true);
set_time_limit(0);
while(1)
{
  $log = Database_Logs::getInstance();
  $log->log ("Minutely maintenance routine started");
  .. do some maintenance ...
  $log->log ("Minutely maintenance routine finished");
  sleep(60);
}

This uses the mechanism of a sql table in memory, which seems fine for
the moment, since it is volatile and would disappear if the user
restarts his laptop (or if the Amazon cloud reboots ;) - thus next time
the user visits any page, this script would be restarted and do the
maintenance till the user shuts down, and so on. I still have to look
into the other mechanisms of creating a volatile flag.

I think therefore, with my limited experience of PHP, that the above
does well, though improvements are welcome.

About scripts running forever, I don't see a problem here since most of
the time it sleeps anyway, and when I look in my Ubuntu 9.10 laptop,
doing "ps ax" gives 194 live processes already, so what does the one
single extra sleeping process matter?

Teus.



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to