【问题标题】:PHP - Start a cron job manually / let the server works instead of the userPHP - 手动启动 cron 作业/让服务器而不是用户工作
【发布时间】:2013-04-01 00:06:27
【问题描述】:

我有一个非常慢的脚本,需要频繁执行(大约一分钟 30 次),因此用户无法执行它,而 cron 作业最多每分钟运行一次。

那么,有没有办法(使用 PHP)让服务器代替用户工作?

【问题讨论】:

  • “让服务器工作”是什么意思?
  • PHP 并让服务器正常工作?猜你忘了 PHP 只在服务器上运行...
  • 一分钟 30 次?听起来您需要将其编写为守护进程而不是 cron 作业。
  • 你应该考虑重写脚本。
  • 我需要减少一个页面的加载时间,该页面必须加载一千个文件才能进行排名

标签: php cron jobs


【解决方案1】:

这很简单:使用标志文件

脚本在没有用户交互的情况下运行(可能由 cron 或 shell 启动,包括 PHP shell 执行):

<?php
while (true) {
  while (file_exists('/path/to/flagfile')) sleep(1); //Can even use microsleep
  include ('/path/to/worker/script');
  touch('/path/to/flagfile');
}
?>

触发它的脚本(通过用户交互从网络服务器开始)

<?php
@unlink('/path/to/flagfile');
echo "Processing triggered!";
?>

【讨论】:

  • 这个想法没问题,但考虑到您可能有关于用户的文件权限问题。 web (apache/httpd) 用户将不同于 cron。如果配置正确,没问题。
  • 不错的脚本,但是有没有办法不花时间呢? (cron 在页面加载时执行,而不是每秒执行一次)
  • @Megadv 定时器循环唯一做的事情就是大部分时间都在睡觉!页面加载将触发真正的执行。将其减少到 1/10 秒并没有真正的惩罚,这对于页面加载来说是非常“立即”的。
  • @Anyone 我们唯一需要的是一个文件,它可以由启动脚本编写并由网络服务器删除。由于您也可以从网络服务器启动脚本,这似乎并不难。
  • 我认为从 Web 界面启动这样的脚本并不是一个好主意。这是由于页面永远不会停止加载。像这样的脚本应该从命令行、cron 或守护进程运行。你可以做的是让一个 webscript 启动一个运行这个脚本的后台进程,但是你可以手动删除文件来解决权限问题,因此我将它记为注释;)
猜你喜欢
  • 2019-10-21
  • 2020-11-10
  • 2018-10-08
  • 2015-12-13
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2014-05-27
相关资源
最近更新 更多