【问题标题】:PHP running multiple instance issuePHP运行多个实例问题
【发布时间】:2014-11-24 20:47:34
【问题描述】:
 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 ax 并看到我的 cron_run.php

执行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

感谢您的帮助

【问题讨论】:

  • 因为sh 调用/usr/bin/php 你看到两个。如果您运行ps axf,您可以更清楚地看到发生了什么:所以没有真正的问题:有 1 个 complete.php 作业正在运行。为什么叫shell_exec而不是include呢?
  • sh -c php 不是 PHP 本身。它是您的 shell_exec() 调用创建的 (SH)ell。
  • 另外,我会考虑查看 complete.php 的作用,以及是否可以将其移植到 shell 脚本。
  • 如果你可以调整使用crontab而不是php,请这样做。

标签: regex linux bash sed


【解决方案1】:

您可以通过将 shell_exec 行更改为:

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

这使得执行的 shell 用命令替换自己,而不是为它创建一个新进程。 (这个技巧在 Linux 下对我有效,在 OSX 和 FreeBSD 下没有额外的 shell 徘徊。)

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2015-08-30
    • 2016-06-12
    • 1970-01-01
    • 2018-01-29
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多