working as a daemon and execute tasks at a certain time

working as a daemon and execute tasks at a certain time

am 10.10.2007 13:11:16 von Dirk Laurenz

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

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

am 10.10.2007 13:23:23 von BoneIdol

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.

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

am 10.10.2007 13:29:22 von Dirk Laurenz

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

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

am 10.10.2007 13:34:41 von BoneIdol

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.

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

am 10.10.2007 15:58:14 von FD

"Dirk Laurenz" schreef in bericht
news:feic0q$qc2$1@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