working as a daemon and execute tasks at a certain time

Hello,

i've written a daemon in php and everthing works fine.
i'm able to execute tasks periodically. for example every 900 seconds.

now i want the daemon to do a task only once a day,
for example at 1800 hours. but i'm not sure how to do
this.
saying something like

while (true)
{
if ($current_time==1800) dosomething
}

fails if i miss 1800 exactly.
saying something like

while(true)
{
if ($current_time<=1801 && $current_time=>1800) dosomething
}

leads to running the function twice, or more depending on
the execution time of the function.

I'm using php 4.3 (more is not allowed at the moment)

Thanks for any help....

Greetings, Dirk
Dirk Laurenz [ Mi, 10 Oktober 2007 13:11 ] [ ID #1841347 ]

Re: working as a daemon and execute tasks at a certain time

You could always make it run the task every 86400 seconds...

Anyway your code executes twice because you use 2 equal than or
greater/less than. Remove an = from that if and it should work ok.

I think anyway.
BoneIdol [ Mi, 10 Oktober 2007 13:23 ] [ ID #1841348 ]

Re: working as a daemon and execute tasks at a certain time

Hi,

BoneIdol schrieb:
> You could always make it run the task every 86400 seconds...

this was my guess, but depends on starting the daemon at 1800 hours,
isn't it.

> Anyway your code executes twice because you use 2 equal than or
> greater/less than. Remove an = from that if and it should work ok.
>
> I think anyway.
>
that does not change anything case the function can execute more than
once per second and a sleep 1 can lead to miss the time. i already
tested this.

dirk
Dirk Laurenz [ Mi, 10 Oktober 2007 13:29 ] [ ID #1841349 ]

Re: working as a daemon and execute tasks at a certain time

Couldn't you do a bit of a dirty hack and make a variable to say that
the code has run today and not to execute this code again until
tommorow?

I'm not overly familiar with daemons in php, by the way.
BoneIdol [ Mi, 10 Oktober 2007 13:34 ] [ ID #1841350 ]

Re: working as a daemon and execute tasks at a certain time

"Dirk Laurenz" <dirk.laurenz [at] fujitsu-siemens.com> schreef in bericht
news:feic0q$qc2$1 [at] nntp.fujitsu-siemens.com...
> Hello,
>
> i've written a daemon in php and everthing works fine.
> i'm able to execute tasks periodically. for example every 900 seconds.
>
> now i want the daemon to do a task only once a day,
> for example at 1800 hours. but i'm not sure how to do
> this.
> saying something like
>
> while (true)
> {
> if ($current_time==1800) dosomething
> }
>
> fails if i miss 1800 exactly.
> saying something like
>
> while(true)
> {
> if ($current_time<=1801 && $current_time=>1800) dosomething
> }
>
> leads to running the function twice, or more depending on
> the execution time of the function.
>
> I'm using php 4.3 (more is not allowed at the moment)
>
> Thanks for any help....
>
> Greetings, Dirk


1800 hours happens only once a day, so you must keep track of the last day
that the task is done.

$done_day = 0;
while (true)
{
if ($done_day <> today() && $current_time >= 1800)
{
$done_day = today();
dosomething...
}
}

today() should return the current day of the week, month or year.

Frank
FD [ Mi, 10 Oktober 2007 15:58 ] [ ID #1841359 ]
PHP » alt.php » working as a daemon and execute tasks at a certain time

Vorheriges Thema: i realy do need an admin php
Nächstes Thema: I Maka Teh Graphs Yo! (aka - no more crappy PHP generated graphs)