每5秒运行一次PHP脚本。

3

我知道要想每秒或每分钟运行PHP脚本,我们可以使用Cron(任务或标签),但Cron只有60秒的时间粒度,因此我们必须使用无限循环来运行PHP脚本。例如,我们可以编写以下代码,在脚本的顶部调用它:

#!/bin/bash
while [ true ]; do   
   #put php script here
done

但这是不合逻辑的,因为我们必须在php.ini中更改php执行时间,这样会在服务器上引起很多问题(安全性、溢出等)。那么,我们应该怎么做呢?我的问题是如何每5秒运行一次php脚本,而不会有php执行时间的问题。


我不明白问题在哪里。为什么你要改变 php.ini 中的任何内容呢?那里的时间限制只针对单个脚本,而不是由此shell脚本运行的所有脚本的总时间。 - Barmar
顺便说一下,应该是 while :; do。对于无限循环,你不需要测试任何东西。 - Barmar
1
// 请尝试这个 // $url1 = $_SERVER['REQUEST_URI'];header("Refresh: 5; URL=$url1"); - Arun
@Arun这不需要一直打开浏览器窗口吗? - user1111929
4个回答

4

使用Cron作业脚本。设置30秒的时间间隔,可以延迟5秒:

-*/5-22 * * * sleep 5;your_script.php

上述脚本将在早上5点到晚上10点之间运行。

另一种替代方法是,

You need to write a shell script like this that sleeps on the specified interval and schedule that to run every minute in cron:

#!/bin/sh
# Script: delay_cmd
sleep $1
shift
$*

然后使用您的参数将其安排在cron中运行:delay_cmd 5 mycommand parameters。

2
 #!/bin/sh

 #

 SNOOZE=5

 COMMAND="/usr/bin/php /path/to/your/script.php"

 LOG=/var/log/httpd/script_log.log

 echo `date` "starting..." >> ${LOG} 2>&1

 while true

 do

  ${COMMAND} >> ${LOG} 2>&1

  echo `date` "sleeping..." >> ${LOG} 2>&1

  sleep ${SNOOZE}

 done

上述脚本将每秒运行一次,当PHP脚本仍在处理时,它不会运行该脚本,并将交互/错误报告写入日志文件中。

0

我更喜欢在你的PHP中使用sleep函数

    while( true ) {

        // function();

        sleep( 5 );

    }

你可以在1分钟后停止它,然后通过cronjob重新启动。通过这种解决方案,您可以在上次执行之后每秒执行脚本,并且它不会异步工作。

使用这个解决方案可以节省资源,因为PHP不需要一直重新启动...


0
如何使用sleep函数每隔5秒延迟执行?
int sleep (int $seconds) - 延迟程序执行给定的秒数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接