2010-05-12 108 views
4

我想在我的php应用程序中添加一个部分来添加/删除计划任务。从PHP内使用cron manager

类似于他们在中使用的东西。vBulletin论坛

有没有人有任何想法他们使用?他们使用cron作业还是他们有自定义的工作。

任何人都可以指导我如何完成类似的事情,基本上我只是想让我的脚本添加或删除cron作业/计划任务。

我不想使用,例如cPanel Cron接口,我想从我的脚本中完成此操作。

任何帮助,非常感谢。

回答

12

如果您没有启用exec()功能,则必须依靠手动设置至少一个通过某个界面的cron作业,然后管理脚本中的各个作业。

我的例子做的是

  1. 我是执行每分钟
  2. 此脚本检查一个MySQL表crontab并检查是否有任何行(工作)与time_to_process <= NOW()
  3. 脚本 heartbeat.php
  4. 如果存在,它会从crontab加载为特定行定义的类
  5. 该类使用run()方法实现接口,我只能调用$cronJob->run(),使其运行
  6. 然后类处理它通过crontab表补赛一旦它完成

一个很好的例子是重置一些项目每天的意见。该作业定于2010年5月1日00:00。作业一旦运行,它会自动安排到第二天。
然后,您可以实现失败作业的自动重置以及PHP中的许多其他功能。

+4

也被称为'穷人的克朗'。 – CodeJoust 2010-05-12 18:41:44

+0

非常感谢:)这几乎是我所需要的,虽然我不想触摸cron的cPanel界面,但我认为最好的解决方案是做类似于你所说的东西;但是不要手动创建一个cron,而应该在用户执行页面请求时,从网站页面中调用该cron-manger脚本。 我想我现在确信vBulletin不会使用cron的 - 因为他们将不得不依赖exec(),它也被禁用在我的主机上,但vbulletin仍然可以使用这些调度程序的全部功能。 – Zubair1 2010-05-14 16:48:36

4

http://ryanfaerman.com/php-crontab-manager/

是一个PHP类,可以让你使用一个类从PHP访问的crontab。

+1

作为链接的帖子里说,cron的行为可能会有所不同,从机器到机器。如果您的php脚本以用户“apache”运行,那么您必须确保允许用户使用crontab,这涉及到查找cron.deny和cron.allow文件。 'man crontab'(如果你有shell的话)可以告诉你在哪里可以找到这些文件以及它们是如何被解释的......如果你打算在未知的环境中打包你的代码以部署,你可能想'假冒它',就像进化的答案一样。 – grossvogel 2010-05-12 14:43:22

+0

@grossvogel我使用了这个库php-corntab-manager但是我收到了内部服务器错误,是否有任何其他方式可以从php脚本中调用启动或停止cron作业 – Hunt 2012-07-02 19:54:43

+0

@CodeJoust,代码的来源给404页。 – Pacerier 2015-02-03 16:08:27

3

我相信vBulletin“假货”cron工作。任何访问页面的用户都会执行代码来检查是否需要运行任何任务。

但是,如果没有用户访问该网站,则不会执行任何cron作业,该方法100%依赖于页面查看。

此外,为了防止执行cron作业的用户延迟页面呈现,他们在页面呈现后执行。

再一次,这正是我所想的正在发生,我没有看过自己的代码。

希望这会有所帮助。

+0

如果它是100%依赖页面浏览量,你总是可以安排一个cronjob每分钟访问该网站..... – Pacerier 2015-02-03 16:09:58

2

这里是我的解决方案:-)命令行

样品:

bin/cronman --enable /var/www/myproject/.cronfile --user www-data 

点击查看更多:php-crontab-manager