【问题标题】:How can I run a php script one at a time by cron?如何通过 cron 一次运行一个 php 脚本?
【发布时间】:2016-04-14 02:49:31
【问题描述】:

我有一个每分钟通过 cron 调用的 php 脚本。 但我不希望它在第一个呼叫仍在加载或正在进行时再次运行?

我曾尝试使用 MYSQL,但有时我的问题是,脚本没有完成加载,因此它无法更新脚本已完成的 MYSQL。它会卡在加载中。

谢谢

【问题讨论】:

    标签: php cron


    【解决方案1】:

    在启动新的之前,您必须使用一个锁定文件或检查它是否已经在运行。

    How to prevent PHP script running more than once?

    我已经在那里采取了解决方案并对其进行了一些修改:

    #!/bin/bash
    
    #change to the name of php-file
    SCRIPT='my-php-script.php'
    
    #get running processes containing php-file
    PIDS=$(ps aux | grep "$SCRIPT" | grep -v grep)
    
    if [ -z "$PIDS" ]; then
      echo "Starting $SCRIPT ..."
      #change path to script to its real path
      /usr/bin/env php "/path/to/script/$SCRIPT" >> "/var/log/$SCRIPT.log" &
    else
      echo "$SCRIPT already running."
    fi
    

    您应该首先尝试在命令行上运行它以查看它是否有效,然后将其添加到 cron。根据系统的不同,它可能有一些不同的路径,并且找不到正确运行所需的部分。

    【讨论】:

    • 谢谢。我使用 bash 脚本。
    • 我注意到脚本正在运行,但它没有运行 php 文件...在 bash 脚本上有一个条件 IF... #!/bin/bash PIDS=ps aux | grep onlytask.php | grep -v grep if [ -z "$PIDS" ];然后回显“正在启动 onlytask.php ...” php /usr/local/src/onlytask.php >> /var/log/onlytask.log & else echo“onlytask.php 已经在运行。”菲
    • if 语句可以跳过运行你的程序已经在运行。 $PIDS 变量如果没有运行,则为空,然后 -z(为空)将匹配,并且 php 文件可以安全运行。我已经用上面脚本的略微修改版本更新了答案。
    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2016-10-01
    • 2020-02-28
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多