【问题标题】:How to autoload an xml file every 30 seconds?如何每 30 秒自动加载一个 xml 文件?
【发布时间】:2012-12-03 08:47:20
【问题描述】:

目前我有一个 parser.php,它加载一个 xml 文件并将 xml 文件中的新数据插入 mysql 数据库。我将如何每 30 秒刷新一次这个 php 文件,以便我的 mysql 表总是有新数据?我想我可以使用短轮询来做到这一点,但我猜这不是最有效的选择。

提前致谢

【问题讨论】:

  • cron 作业的问题是我将被限制为 1 分钟间隔
  • CronsetInterval。取决于你想对你的服务器征税多少。
  • 很遗憾,Cron 作业对于低于一分钟的间隔没有用。
  • 在 php 中使用 sleep() 以 1 分钟间隔 cron 30 秒后再次运行函数
  • 不会引入滑动窗口问题

标签: php jquery mysql xml-parsing


【解决方案1】:

这是一个非 PHP 解决方案,需要您拥有 shell (SSH) 访问权限才能运行脚本,但是如果您愿意,您也可以使用 exec() 通过 PHP 运行它到。共享托管环境可能会给这种方法带来挑战,但只要您可以在您的用户凭据下执行脚本,运行它应该没有问题。

首先,您需要创建一个包含以下内容的 bash 脚本并保存(在本示例中,我将使用名称 parser.sh)。然后,您可以根据需要调整 sleep 30 行中的超时时间。

#!/bin/sh  
while true
  do
    php parser.php
    sleep 30
  done

为了运行脚本,您需要授予它执行权限。

chmod +x parser.sh

现在您可以使用带有与号 (&) 参数的 nohup 命令来确保脚本将在后台运行,即使在发送终止信号之后,例如关闭外壳(SSH)。 & 符号很重要

nohup ./parser.sh &

现在您可以使用topps aux | grep parser 来确保脚本正在运行。正如我之前已经说过的,您也可以使用 PHP exec() 来启动该过程,但 shell 仍然是执行此操作的首选和最可靠的方式。

如果您想停止执行脚本的后台进程,那么您只需将其杀死即可。只需使用ps aux | grep parser 找出解析器进程的PID(位于左侧第二列),然后将其与kill 命令一起使用。

kill 4183

【讨论】:

  • 是的。有些事情根本不打算通过 PHP 来实现,而这正是您学习 bash 脚本的地方。
  • 我会将这个脚本保存为我的服务器上的什么(对不起,我是多么笨!)
  • 文件扩展名是 .sh 吗?
  • bash 并不挑剔,因此您不需要为 bash 脚本使用 .sh 扩展名。但是,使用它绝不是一个坏主意。我会添加它以避免混淆。
  • 太棒了,所以它应该通过实现你上面所做的来工作:)
【解决方案2】:

您需要使用 cronjob,但 crons 作业每 1 分钟或更长时间运行一次。

另一种方法是制作“守护进程”。

非常基本的例子:

<?php
while(true) {
   // check if 30 seconds has passed.
   // then execute some function...
};
?>

然后你需要在你的终端中执行这个:

$ php script.php &

这个link 应该会有所帮助。

太棒了!

【讨论】:

  • 是的,我需要
  • 是的,一个守护进程。一个在后台运行并不断做某事的程序……在这种情况下,每 30 秒获取一个 xml。
  • 看我的回答,有一个基本的例子。
  • 谢谢你,我猜&把它放在后台?我如何检查是否已经过了 30 秒
  • 另外,守护进程是否占用大量内存?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多