【问题标题】:Run a PHP file every 5 seconds using Shell Script使用 Shell 脚本每 5 秒运行一次 PHP 文件
【发布时间】:2021-08-03 23:08:46
【问题描述】:

我想使用 Shell 脚本每 5 秒运行一次 php 文件。但有时脚本会每秒运行一次,有时会停止运行。我还需要使用 crontab 吗?请帮忙。

#!/bin/bash
while true; do
    begin=`date +%s`
    php /home/user/www/run.php
    end=`date +%s`
    if [ $(($end - $begin)) -lt 5 ]; then
        sleep $(($begin + 5 - $end))
    fi
done

【问题讨论】:

  • 据我了解,linux cron 可以在 Minutes、Hours、Days、Months 中运行,但 NOT 秒。你应该使用你的 shell 脚本和nohup 在后台运行它

标签: php shell sh


【解决方案1】:

最好的办法是配置 crontab 以保持执行或其他程序作为服务安装。

contrab 的问题是最小执行是每 1 分钟。因此,您应该创建一个每 5 秒执行一次不超过 12 次的脚本。 (12 x 5 秒 = 60 秒)

杀死进程并使用 crontab 重新运行它。

示例

sript.sh

#!/bin/bash
# Do not run 12 times because this will same time as next crontab execution
for i in 1 2 3 4 5 6 7 8 9 11 
do 
    php /home/user/www/run.php
    sleep 5
done

在 crontab 上

* * * * * /path/to/script.sh

【讨论】:

    【解决方案2】:

    试试这个:

    #!/bin/bash
    while true; do
        sleep 5 &
        php /home/user/www/run.php &
        wait
    done
    

    wait(不带参数)等待所有后台作业完成,因此循环将阻塞,直到 更长 的 sleep 和 php 进程完成。


    演示the SECONDS variable

    rand() { echo $(( RANDOM % $1 )); }
    
    for i in {1..10}; do
        start=$SECONDS
        r=$(rand 10)
        echo "iteration $i, sleeping for $r seconds"
        sleep $r
        end=$SECONDS
        if ((end - start < 5)); then
            n=$((5 - (end - start)))
            echo "sleep for $n seconds"
            sleep $n
        fi
    done
    
    # or more simply by assigning to SECONDS
    for i in {1..10}; do
        SECONDS=0
        r=$(rand 10)
        echo "iteration $i, sleeping for $r seconds"
        sleep $r
        duration=$SECONDS
        if ((duration < 5)); then
            n=$((5 - duration))
            echo "sleep for $n seconds"
            sleep $n
        fi
    done
    

    肯定比使用wait更复杂

    【讨论】:

    • 另外,在 bash 中,使用内置的 $SECONDS 变量而不是调用 date,此时您需要做的就是跟踪持续时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2018-10-26
    • 2013-02-23
    • 1970-01-01
    • 2018-03-06
    • 2014-09-25
    • 2010-12-16
    相关资源
    最近更新 更多