Question

Currently I have a perl script that runs forever on my server, checking a SQS for data to compute. This script has been running for about 6 months with no problems what so ever.

So, now I want to switch over to PHP'S CLI, and have the script loop there forever. Mostly because I'm more familiar with PHP.

Basicly,

$i="forever";
while($i==="forever"){
    doSomething();
    sleep(10);
}

The script will do a shell_exec("/shell_script.sh"); that can take up to 2 hours to process. Will this trigger a max execution time or similar?

Is this "ok" to do? If not, what is the alternatives?

Was it helpful?

Solution

You will need to make sure that you set the maximum execution time of the script to zero, so that no time limit is imposed. You can do this from the PHP file with,

set_time_limit(0);

Or you can set it in your php.ini file. (See PHP manual on set_time_limit for more information). Other than that, your approach should work fine.

However, there's no need to set a variable and check it in order to loop forever,

$i="forever";
while($i==="forever")

You can simply just do while(true) or while(1).

OTHER TIPS

Personally, I would use Python or Perl for a task such as this. PHP is really more of a domain-specific language for writing web sites and services.

Just a side-note as other have suggested to turn of the time limit via set_time_limit:

Due to endless possibilities of using PHP in shell environments, the maximum execution time has been set to unlimited. Whereas applications written for the web are often executed very quickly, shell application tend to have a much longer execution time.

Using PHP from the command line >> Differences to other SAPIs

So actually running PHP scripts on the command line do not suffer from the execution time limit.

I'm not very familiar with unix, but I think people can use "cron" to do routine tasks. Write your tasks in scripting language of your choice, and have it executed periodically by Cron.

If all you wanted to do was have an endless loop then

$i=1;
while($i===1){
    doSomething();
    sleep(10);
} 

Simply saying as long as $i is 1, script will keep going and $i never changes so... Only problem is that you might have an execution time limit so if you do then use this or similar

for($i=1; $i<100; $i++){
    doSomething();
    sleep(10);
} 
header("Location: samepage.php:);

EDIT Ignore my post Use Having a PHP script loop forever doing computing jobs from a queue system

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top