Having a PHP script loop forever doing computing jobs from a queue system

耗尽温柔 提交于 2019-12-23 12:17:02

问题


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?


回答1:


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).




回答2:


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.




回答3:


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.




回答4:


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.




回答5:


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



来源:https://stackoverflow.com/questions/2977105/having-a-php-script-loop-forever-doing-computing-jobs-from-a-queue-system

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!