Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CLI每秒运行一次PHP脚本_Php_Loops_Time_Cron_Command Line Interface - Fatal编程技术网

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

使用CLI每秒运行一次PHP脚本,php,loops,time,cron,command-line-interface,Php,Loops,Time,Cron,Command Line Interface,我有一台运行Cent OS的专用服务器,带有并行PLESK面板。我需要每秒运行一个PHP脚本来更新我的数据库。从时间上看,这些都不是替代方法,它需要每秒钟更新一次 我可以使用URLhttp://www.somesite.com/phpfile.php?key=123 文件是否可以每秒在本地执行?像phpfile.php 更新: 我提出这个问题已经有几个月了。我最终使用了以下代码: #!/user/bin/php <?php $start = microtime(true); set_tim

我有一台运行Cent OS的专用服务器,带有并行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);
}
?>
#/user/bin/php

我的工作设置为每分钟一次。我已经在一个测试环境中运行了一段时间,效果非常好。它真的非常快,我看不到CPU和内存使用量的增加。

为什么不运行cron来实现这一点,并在php文件循环中运行60次,这是一个短暂的睡眠。这就是我克服这一问题的方法,每分钟运行5次php脚本

要设置文件作为脚本运行,请在第一行添加PHP的路径,例如perl脚本

#!/user/bin/php
<?php
    while($i < 60) {
      sleep(1);
      //do stuff
      $i++;
    }
?>
#/user/bin/php

您实际上可以在PHP中完成。编写一个程序,运行59秒,每秒检查一次,然后终止。将其与cron作业相结合,cron作业每分钟运行一次该进程

一种方法是:

set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    doMyThings();
    sleep(1);
}

我注意到OP编辑了答案以给出他的解决方案。此解决方案在my box上不起作用(指向PHP的路径不正确,PHP语法不正确)

此版本有效(另存为whater.sh和chmod+X whater.sh,以便可以执行)

#/usr/bin/php

你想过用“手表”吗


只要启动一次,它就会继续运行。通过这种方式,它不会受到PHP崩溃的影响(虽然不会发生,但您永远不会知道)。您甚至可以添加此inittab以使其完全防弹。

这是
nickf
second解决方案的简单升级版本,允许在执行时间内指定每次执行之间所需的间隔(以秒为单位)

$duration = 60; // Duration of the loop in seconds
$sleep = 5; // Sleep beetween each execution (with stuff execution)

for ($i = 0; $i < floor($duration / $sleep); ++$i) {
    $start = microtime(true);

    // Do you stuff here

    time_sleep_until($start + $sleep);
}
$duration=60;//循环的持续时间(秒)
$sleep=5;//每次执行之间的睡眠(使用填充执行)
对于($i=0;$i
您好,感谢您的快速回复。我也在想同样的事情,但是这种方法不需要更多的cpu和内存使用吗。我不知道如何更改我的域的默认php设置。我假设它的执行时间有限。
set\u time\u limit
将更改执行时间,并且根据我的经验,通常不会被主机阻止。你能每分钟帮我设置这个Cronjob吗。这个答案非常有用,尤其是第二部分。对于那些想知道为什么有人想经常运行cron的人;考虑一下我的情况,我需要每2秒通过API查询交易市场数据。这个答案的后半部分特别有用,因为如果远程服务器繁忙,发出api请求的php脚本有时会运行超过2秒。这种方法不会消耗更多的cpu功率或内存使用量吗?将文件作为脚本运行意味着什么?不,与每秒重新加载PHP解释器相比,睡眠几乎肯定会占用更少的CPU。请注意,这可能加起来超过60秒,因为脚本也会占用一些时间。这将导致下一个cron作业与上一个执行重叠。我想我会问——你在做什么,需要每秒钟做一次?这似乎会给MySQL服务器带来难以置信的压力。嗨,我要运行一个拍卖网站。在这个网站上,你可以放置自动竞价,这些需要在时间结束前完成。对于竞价人来说,结束时间会延长一段时间,因此拍卖不必在特定的时间结束。@Saif,编辑你的问题以撤销拼写更正并没有多大帮助……事实上,我更喜欢这个解决方案,而不是接受一个和其他有相同想法的解决方案。你好,米兰,我曾尝试在谷歌上搜索如何使用watch-N1,但没有结果。如果你能给我一些建议我会很高兴的谢谢你有关于这个命令的更多信息吗?您在哪里发布?此链接可能会有所帮助-
#!/usr/bin/php
<?php
$start = microtime(true);
set_time_limit(60);
for ($i = 0; $i < 59; ++$i) {
    echo $i;
    time_sleep_until($start + $i + 1);
}
?>
watch -n 1 /path/to/phpfile.php
$duration = 60; // Duration of the loop in seconds
$sleep = 5; // Sleep beetween each execution (with stuff execution)

for ($i = 0; $i < floor($duration / $sleep); ++$i) {
    $start = microtime(true);

    // Do you stuff here

    time_sleep_until($start + $sleep);
}