3

如何创建不可停止的while循环,如果它已经在运行不要再次运行它,我假设如果脚本运行它将更新数据库中的最后一个cron时间,并且脚本将检查当前时间 - 40秒是否小于最后一个cron时间。我所拥有的样本,但那是过度循环(一次又一次地运行做过程)谢谢!

<?php
ignore_user_abort(1); // run script in background 
set_time_limit(0);    // set limit to 0


function processing()
{
//some function here
setting::write('cron_last_time', $time); // write cron last time to database
}

$time = current_timestamp();  // current time
$time_before = $time - 20;   //

$settings = setting::read('module_cron_email'); // Get last cron time from database ( in array )
$time_last = $settings['setting_value'];     // Last cron time get value from array



if ($time_before < $time_last) // check if time before is less than last cron time
{ 
   do{
   processing(); //run our function
   sleep(7);    // pause for 7 seconds
   continue;   // continue
   }
   while(true); // loop
}else{

echo "already running";
die();
}
?> 
4

2 回答 2

6

启动脚本时,检查锁定文件。如果确实存在,则退出或跳过循环。如果它不存在,请创建文件并让它运行。

于 2012-05-05T16:57:44.230 回答
-2

PHP PCNTL是您所需要的!您可以使用它来分叉 PHP 进程。

                 while(true) { // Infinite

                     $pid = pcntl_fork();

                        switch (pcntl_fork($pid)) {

                                case -1:

                                        die('Fork failed');

                                        break;

                                case 0: // Child

                                        processing();

                                        exit(0);

                                        break;

                                default: // Parent

                                        pcntl_waitpid($pid, $status);

                                        break;

                        }

        }
于 2012-05-05T16:58:10.357 回答