使用CLI每秒运行一次PHP脚本

Sai*_*han 14 php cron time loops command-line-interface

我有一个运行Cent OS的专用服务器,带有Parallel PLESK面板.我需要每秒运行一个PHP脚本来更新我的数据库.这些在时间上是无可替代的方式,它需要每秒更新一次.

我可以使用URL找到我的脚本http://www.somesite.com/phpfile.php?key=123.

文件可以每秒在本地执行吗?喜欢phpfile.php

更新:

我加上这个问题已经有几个月了.我最终使用以下代码:

#!/user/bin/php
<?php
$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    time_sleep_until($start + $i + 1);
}
?>
Run Code Online (Sandbox Code Playgroud)

我的cronjob设置为每分钟.我已经在测试环境中运行了一段时间,并且它运行良好.它真的超级快,我看到CPU和内存使用没有增加.

nic*_*ckf 27

你实际上可以用PHP来做.编写一个将运行59秒的程序,每秒执行一次检查,然后终止.将它与一个cron作业结合起来,每分钟运行一次这个过程,然后嘿嘿.

一种方法是:

set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

您唯一需要注意的是功能的运行时间doMyThings().即使这只是一小部分,然后超过60次迭代,这可能会导致一些问题.如果您运行PHP> = 5.1(或Windows上的> = 5.3),那么您可以使用time_sleep_until()

$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    time_sleep_until($start + $i + 1);
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案非常有用,特别是第二部分.对于那些想知道为什么有人想要经常运行cron的人; 考虑一下我的情况,我需要每2秒通过一次api查询交易市场数据.这个答案的后半部分特别有用,因为如果远程服务器忙,有时发出api请求的php脚本将运行2秒以上. (3认同)

Mil*_*kov 23

你有没有考虑过使用"手表"?

watch -n 1 /path/to/phpfile.php
Run Code Online (Sandbox Code Playgroud)

只需启动一次它就会继续下去.这样它就可以免受PHP崩溃的影响(不是它发生了,但你永远都不知道).您甚至可以添加此inittab以使其完全防弹.

  • 实际上,我更喜欢这个解决方案,而不是接受的解决方案和其他具有相同想法的解决方案。 (2认同)