2009-08-28 94 views
3

我的情况如下:我们有一个外部提供者,它将在本周的特定时间每30秒将XML文件推送到我们的服务器。这段时间每周都会有所不同。因此,我想给我的用户提供一个我们网站管理端的界面,他们可以“按下按钮”并触发数据捕获。 (并以同样的方式能够关闭该作业)使用PHP添加/删除cron作业

我已经计划使用PHP来完成此操作。我假设我需要从脚本运行一些系统命令来安排和删除cron作业。

我的问题是:这是做这件事的最好方法吗?在安排和删除cron作业从php中是否有任何危险?我在创建这个时需要记住哪些事项?

此外,任何指针/提示如何实现这一点是值得欢迎的。提前致谢。

+0

考虑到您的建议,我将设置cron作业连续运行的位置,并检查目录中的更新文件。这似乎是最简单和最有效的解决方案。感谢您的帮助 – Anthony 2009-08-28 17:49:45

回答

4

我会建议只保留寻找上传的XML文件,每分钟都在运行的cron作业。检查目录中是否存在任何文件不是一个足够昂贵的操作,您需要使一个涉及的管理界面在不需要时将其关闭。

+0

我应该提出这个问题的一部分......我想我需要每30秒左右运行一次这个工作来获得最新的数据。可能每隔30秒解析一个合理大小的xml文件是否会对性能产生负面影响?或者这是一个有争议的问题? – Anthony 2009-08-28 14:08:57

+0

如果它“合理大小”,我怀疑你会伤害任何东西。但请注意,“cron”每分钟最好的分辨率是一次;如果您必须每30秒处理一次,则需要让cron作业休眠30秒并进行第二次检查,或者只需创建一个守护程序。 – chaos 2009-08-28 14:12:09

+0

啊,我忘了cron只会下到分钟,而不是第二个。谢谢您的帮助。 – Anthony 2009-08-28 14:17:50

1

您可以阅读crontab文件并添加/取消注释或注释掉运行脚本的行。这会让我感到紧张,因为错误会导致你的crontab被破坏,影响其他工作。

您也可以让cron作业继续运行。让你的on/off开关在其他文件或数据库中设置一个值,然后让cronned脚本检查该值以确定它是否应该实际执行任何操作或只是退出。

或者,只需让cron作业始终运行,以便用户始终拥有新的数据并且不必记住打开文件读取。

或者,设置cron作业,使其只在一周的特定时间运行。

2

我建议你不要使用PHP添加或删除cron作业。您应该编写一个(固定的)cron作业,而不是使用PHP配置。它可以检查一些配置文件或数据库,每次它运行实际的作业,你排队。

1

我以前做过这种事情。我不建议在crontab级别打开/关闭cron。

相反,离开运行所有的时间cron的,但PHP脚本应该是这样的:

if(ScriptIsEnabled()) 
{ 
    DoWork() 
} 

ScriptIsEnabled()应该寻找一个标志在配置文件,数据库,内存缓存,或者无论你有多想与脚本沟通。我更喜欢memcache(最小开销 - 只是设置一个值)在数据库上。

然后,您可以使用开/关按钮来控制此网页。

+1

+1这是一个非常好的和最可靠的方法,特别是如果你不能直接操作crontab是因为安全特权。 – 2009-09-20 18:04:43

+0

+1是的,简单而聪明 – dino 2011-10-15 16:11:00