【问题标题】:php script that run continously and concurrently with cronjob与 cronjob 连续并同时运行的 php 脚本
【发布时间】:2012-01-04 07:08:44
【问题描述】:

我有 3 个脚本可以做一些事情。 我想连续并同时运行它们。

比如说: 第一个脚本需要 30 分钟才能完成。 第二 - 20 分钟。 第三 - 5 分钟。

所以我需要他们每个人在完成后立即运行。 这 3 个脚本在同一个数据库中进行 UPDATE,但它们需要单独工作。 他们可以一次一起跑,但不能跑几次(我的英语很烂,对此感到抱歉)。 让我们用例子来解释我的意思:

firstScript.php is running
secondScript.php is running
thirdScript.php is running

firstScript.php trying to start but it still running. Wait.(till finish)

可能有一些 shell 脚本可以完成这项工作,但如何?

【问题讨论】:

  • 三个脚本都可以通过 url 访问吗?我唯一能想到的就是创建一个 cron 脚本,它按顺序向它们卷曲,并在运行时等待响应,然后再继续下一个,但这是一个非常丑陋的解决方案。考虑一下 - 这些脚本是否可以由您站点其他地方的用户流量运行,使用他们的请求进行远程调用? php 作为 Request-to-run 的性质使得很难利用这样的任务。
  • 不。它们不能通过 url 访问。我需要手动运行它们。
  • 是否可以选择将状态保存到磁盘?我可以想到一些方法来保存正在运行的页面文件,并在运行时先加载文件并确定从那里做什么。
  • 我认为使用下面的方法会更容易。只需在脚本末尾“告诉”我需要再次执行它。但感谢您的帮助和时间。我真的很感激!

标签: php shell crontab


【解决方案1】:

您可以在 php 脚本终止之前执行 shell 命令。示例:

while($i < 1000)
{
$i++;
}
shell_exec("bin/php.exe some_script.php");

如果您使用共享主机帐户,这可能无法解决安全问题。 请注意需要为您的服务器编辑“bin/php.exe”,指向您的 php 安装位置。

【讨论】:

  • 嗯.. 它只是冻结了几秒钟,并且不再运行脚本。安全模式已关闭,我正在使用 VPS。
【解决方案2】:

制作一个接受一个参数的 bash 脚本,并让它执行以下操作:

if [ -f /tmp/$1 ]
then
    echo "Script already running"
else
    touch /tmp/$1
    php $1
    rm /tmp/$1
fi

设置一个 cron 来运行这个脚本并将你想要运行的 php 脚本的名称传递给它。

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多