PHP/Cron 限制并发运行脚本数量

发布于 2024-10-17 04:41:25 字数 366 浏览 3 评论 0原文

我有一个用 PHP 编写的脚本,由 cron 作业启动。这是一个长时间运行的脚本,并且 cron 通常会在最后一个实例完成之前启动另一个实例。没关系。我允许该脚本的 3 个实例在任何给定时间运行。

我将脚本限制为 3 个实例,并在脚本顶部使用以下代码:

exec('ps -A | grep nameofmyscript', $results);
if (count($results) > 4) {
    echo "Already Running\n"
    die(0);
}

它有效,但我正在寻找更好的方法。几周前,当我重命名脚本并忘记更改该行代码时,这种方法适得其反。当脚本的名称类似于已运行的进程时,它也会失败。

I have a script written in PHP that is kicked off by a cron job. It's a long running script, and often cron kicks off another instance before the last is finished. That's fine. I allow 3 instances of this script to run at any given time.

I limit the script to 3 instances with this code at the top of the script:

exec('ps -A | grep nameofmyscript', $results);
if (count($results) > 4) {
    echo "Already Running\n"
    die(0);
}

It works, but I'm looking for a better way. This approach backfired on me a few weeks back when I renamed the script, and forgot to change that line of code. It also fails when the script is named something similar to an already running process.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何以笙箫默 2024-10-24 04:41:25

使用 PHP,您可以在特定于 cron 作业的目录中创建一个随机命名的锁定文件。在继续执行 PHP 脚本之前,请检查目录中存在的锁定文件的数量。但这可能不是最好的解决方案。

Using PHP, you could create a randomly named lock file in a directory specific to the cron job. Check for the number of lock files that exist in the directory before letting the PHP script continue. This may not be the best solution though.

っ左 2024-10-24 04:41:25

您可以自动放置名称...

exec('ps -A | grep ' . escapeshellarg(basename(__FILE__)) , $results);
if (count($results) > 4) {
    echo "Already Running\n"
    die(0);
}

You could automate the name placement...

exec('ps -A | grep ' . escapeshellarg(basename(__FILE__)) , $results);
if (count($results) > 4) {
    echo "Already Running\n"
    die(0);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文