我有个定时器会定时发邮件,内容如下//mailtask.php
....
ignore_user_abort(true); // run script in background
set_time_limit(0); // run script forever   
do{     
    sendmail(XXX); 
    sleep(300);    
}while(true);现在我想停止掉它,但是好像没办法,我把这个php文件删掉了也还不行,还是会继续执行,请问有什么
办法呢?除了停掉服务器和设置退出检测变量。(因为开始就没设置退出检测变量,所以现在设置也没用)。

解决方案 »

  1.   


    do{
      //
      if(file_exists('dir/somefile.l……'))
      {
          exit();//OR  sleep(…);
      }
      //   
      sendmail(XXX);  
      sleep(300);
    }while(true);
      

  2.   

    只能写好代码,停止服务,重启了吧。已经永驻运行了不过通过判断某文件可能是比较简单的思路,。受前几天一帖子启发,你也可以利用shmop共享内存,来控制不同进程间通讯来实现判断
      

  3.   

    我也遇到过这个问题,发过帖子,一直没解决
    http://topic.csdn.net/u/20100929/13/ada26fec-6a82-47a0-8dfc-0745b637db19.html
    无奈,把apache重启了一下
      

  4.   

    感觉用php做定时任务太牵强。 用java 或者其他支持线程的语言。推荐用serlvet做个中间件(tomcat当容器)使用xmlrpc进行处理。安全问题要考虑。 
      

  5.   

    杀进程啊··kill掉不就完事了
      

  6.   

    如果Linux,可以用crontab来定时执行PHP程序
      

  7.   

    定时发邮件,最好不要用PHP写。
    杀进程,重启APACHE
    把电掐了
      

  8.   

       现在只有重启Apache了,但是这个循环设计的时候就不科学。
    while($swith==1){}
    至少你可以用其他代码将$swith设置成其他值,已达到关闭循环的目的。
      

  9.   

    进程怎么kill掉啊?进程的id也不是唯一的吧
      

  10.   


    照这样的想法是不是可以do{
      //全局变量或者常量 value=0,value=1 ,循环的时候会不会读取内存的其他值?
      include '....';
      if($value)
      {
          exit();//OR  sleep(…);
      }
      //   
      sendmail(XXX);  
      sleep(300);
    }while(true);