设置PHP定时任务

3

如何通过程序设置cron job?

我们为项目制作了安装程序,在安装时需要使用PHP以编程方式设置cron job。

请注意,该项目可能在LINUX / WINDOWS上运行,

我该如何实现这一点?或者是否有比CRON JOB更好的选项。

我正在使用Codeigniter(欢迎使用基于原生PHP的解决方案,但如果是通过CI,则会非常有帮助)

cron job包括:

  1. 检查特定表并删除无效数据
  2. 从邮件服务器向数据库插入值
  3. 检查某些文件的可用性。

谢谢。


Windows系统没有cron命令,所以我猜你应该使用Windows任务计划程序:http://support.microsoft.com/kb/308569,请查看这个帖子https://dev59.com/KW855IYBdhLWcg3wUCaC。 - Cyclonecode
3个回答

8

2
Cron是Linux的作业调度程序,它不能在Windows上工作(除非您开始使用Cygwin等高级方法)。如果您必须支持整个系统、跨越各种未知系统,并且全都是PHP(不能按原样安排计划任务),则可以采用以下三个已用的解决方案之一:
从地面控制台调用(资源最佳、具体时间、最优雅的解决方案):
1. 运行cron并ssh到其他机器运行命令。 2. 运行cron并访问"secret url"以运行命令。 3. 使用外部服务(例如SetCronJob)调用您的"secret url"。
随机作业运行器(实施最容易、资源中等):
如果您需要做一些不会直接影响用户在您网站上的行为,并且这不是时间敏感的(只需要完成即可),则可以通过统计概率来运行。
// this will run on average once every 100 page views
if(rand(1, 100)==1) runJobQueue();

最坏情况下(对资源更为苛刻)。
如果你的工作必须按时间表定期执行,因为它会直接影响用户,并且必须符合某个时间进度,那么你可以保存上次运行的时间戳并不断检查它,以确定是否需要重新运行该任务,并查询和更新数据库。
// if has passed 1 hour since last update... re-update it
$result = mysql_query("SELECT `timestamp` FROM job_times WHERE whatever...")
if(mysql_result($result, 2) >= ( now() - 3600)) {
    runJobQueue()

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接