2014-11-24 102 views
-1
5877 pts/1 S  0:00 php cron_run.php 
5879 pts/1 S  0:00 sh -c /usr/bin/php /srv/www/videofix.d.com/public_html/v/complete.php 
5880 pts/1 S  0:00 /usr/bin/php /srv/www/videofix.d.com/public_html/v/complete.php 
5884 pts/1 S  0:00 sh -c php 2.php 4584.2 
5885 pts/1 S  0:01 php 2.php 4584.2 

我试图ps的斧头,看到我的cron_run.phpPHP运行多个实例的问题

其执行complete.php

但似乎在运行2个实例。

1 is with sh -c 
1 is without 

是2实例还是实际1实例。

How do i modify my code so it only run one instance at a time 

这是我的cron运行文件

<?php 
while(1<2) 
{ 
//run every 2 minutes 

shell_exec("/usr/bin/php /srv/www/videofix.d.com/public_html/v/complete.php"); 

sleep(120); 
} 
?> 

在无限循环运行,但没有SH-C,所以只有1的/ usr/bin中

感谢您的帮助

+1

因为'sh'调用'的/ usr/bin中/ php'你看到两个。如果你运行'ps axf',你可以更好地看到发生了什么:所以没有真正的问题:有1个complete.php作业正在运行。你为什么要调用'shell_exec'而不是'include'呢? – Wrikken 2014-11-24 20:50:41

+0

'sh -c php'不是PHP本身。它是由你的'shell_exec()'调用创建的(SH)。 – 2014-11-24 20:51:09

+0

此外,我会考虑检讨什么'complete.php'呢,如果它可以移植到一个shell脚本来代替。 – 2014-11-24 20:53:07

回答

0

您可以通过改变了shell_exec行删除多余的过程:

shell_exec("exec /usr/bin/php /srv/www/videofix.d.com/public_html/v/complete.php"); 

这使得执行外壳与命令替换本身,而不是派生一个新的进程吧。 (这招对我的作品在Linux下,OSX和FreeBSD没有多余的外壳之下徘徊。)