如何在本地服务器(如WAMP)中测试cron作业?

16

如何在WAMP等本地服务器上测试cron作业?

10个回答

14

Windows系统没有Cron(它是Linux系统的主要任务调度程序),相应的Windows版本是Task Scheduler这个问题建议使用at命令。

因此,由于Cron与Apache、Mysql、PHP的设置无关,我认为在Windows系统中不可能可靠地测试您为Linux Cron创建的cronjobs(也许可以使用Cygwin)。


1
附注:当前使用任务计划程序的程序是schtasksat已经被弃用了几年,因为它只代表任务计划程序中较旧版本中存在的功能。 - Joey

8

您可以创建一个HTML页面并在浏览器中打开。JavaScript的setInterval函数将按指定时间间隔调用。

以下是实现此功能的代码。请指定您的时间间隔(例如5000,表示每5秒运行一次):

<html>
<head>
    <title>Cron</title>
</head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<body>
<h1>Cron page</h1>
<script type="text/javascript">
    setInterval(function(){
        $.get('http://localhost/test/test.php', function(data) {
            console.log(data);
         });
    }, 5000);
</script>
</body>
</html>

注意:为了避免CORS问题,您应该从同一主机调用ajax或在服务器端允许CORS。

5
你可以运行这个代码:
set_time_limit(0);
ignore_user_abort(true);
while (1)
{
    //your code here....
    sleep($timetowait);
}

您可以关闭浏览器,脚本依然会继续执行。 set_time_limit(0); 可以让您的脚本无时间限制地运行。 sleep($timetowait); 确定在执行下一个 while() 循环之前等待的时间。 ignore_user_abort(true);即使浏览器已关闭,也让脚本继续运行。 while(1) 是一个无限循环,因此除非您退出 wamp,否则它将永远不会停止。

1
为了优化我的点赞功能 - 这是一个由浏览器运行触发的 .php 文件。它可以完成任务,但请记住它会留下一些 Apache 进程在后台运行。 - James Bailey

4

安装cron(是的,Windows也可以使用)。

虽然如此,我不想在Windows上这样做。您最好获取VirtualBox的副本,并创建更符合您的生产环境的东西来进行开发。


1
我认为这并没有回答问题。WAMP是用于Windows的,而Cron是用于Unix/Linux的,所以仅仅告诉他安装Cron是没有任何意义的。他可能想表达的是为Windows提供一些替代Cron的方案。 - Chetan Paliwal
1
@ChetanPaliwal — 很多 UNIX 软件可以在 Windows 上运行,例如 Cron :http://cronw.sourceforge.net/。 - Quentin
是的,但仅仅回答“安装cron”,而不给任何链接或参考资料,在我看来不是一个很好的回答方式。 - Chetan Paliwal

4

您可以直接从URL运行脚本,这意味着如果您想从cron设置运行cron_test.php脚本并测试相同结果,则可以直接从本地主机运行此文件,例如http://localhost/XXXX/cron_test.php


3
您可以在Windows环境中使用一行代码来设置您的定时任务。我已经花了将近5个小时,所以我想与其他人分享如何创建一个任务。
  • 在程序中输入php.exe路径,在我的安装中是c:\wamp\bin\php\php5.3.5\php.exe。
  • 第二步,您需要放置要运行的文件的绝对路径,例如-f c:\wamp\www\foo\foo.php
这样就完成了。不需要安装任何东西。

2

只需从命令行运行作业。你要测试的是作业,而不是cron本身。如果需要定期执行以模拟cron,则使用Windows的“计划任务”功能。


-2

试试这个命令

<?php

echo exec('0 13 * * * D:\wamp\bin\php -f D:\wamp\www\be.php');

?>

我想象如果OP提到WAMP,他想要访问一个网页,而不是一个php文件。因此它应该在浏览器的上下文中运行,因此使用例如Curl。您可能没有PHP Web服务器变量,如$ _GET和$ _SESSION。另外,exec在Windows上真的会运行吗? - Michiel van der Blonk

-2

<meta http-equiv="refresh" content="0; url=http://localhost/myproject/cron.php" />

立即设置一个 meta 刷新: content = 0 每 5 秒刷新一次: content = 5


4
这是重定向而不是Cron Job。Cron Job会静默执行。整个概念是能够执行某些任务,无需用户干预。这将在窗口中打开页面并进行处理。 - Starx

-3
在编程中,“cron job”是什么意思?在许多网站上,会有特殊的页面,比如“cron.php”,它会定期被访问,通常是像这样的方式:
0 * * * * wget http://example.org/cron.php

如果是这种情况,您只需要手动触发cron php文件以模拟行为即可。


我所指的是,这个cron job在做什么?在网站术语中,“cron”通常等同于“偶尔运行的任务”,可以通过任务计划程序或手动触发来实现。如果您确实需要测试crontab,则是一个不同的问题。 - ZoFreX
好的,那么如何使用任务计划程序在特定时间间隔内执行PHP脚本? - Starx

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