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

Posted

技术标签:

【中文标题】如何在 WAMP 等本地服务器中测试 cron 作业?【英文标题】:How to test a cron job in Local Server like WAMP? 【发布时间】:2011-03-15 07:27:36 【问题描述】:

【问题讨论】:

【参考方案1】:

你所说的“一个 cron 工作”是什么意思?在很多网站上都有一个特殊的页面,比如“cron.php”,它会定期点击,通常是这样的:

0 * * * * wget http://example.org/cron.php

在这种情况下,您只需要手动点击您的 cron php 文件来模拟行为。

【讨论】:

嗯,我的意思是,cron 工作在做什么?在网站术语中,“cron”通常是“偶尔运行的作业”的同义词,可以通过任务调度程序或手动点击它来实现。如果你真的需要测试 crontab,那就是另一个问题了。 好的,那么如何使用任务调度器在一定的时间间隔内执行一个PHP脚本呢?【参考方案2】:

安装cron(是的,它是available for Windows)。

我不会想要在 Windows 上这样做。您最好获取 VirtualBox 的副本并创建更类似于您的生产环境的东西来进行开发。

【讨论】:

我认为这不能回答问题。 wamp 适用于 windows,而 cron 适用于 unix/linux,所以只是告诉他安装 cron 没有任何意义。他可能的意思是建议一些替代 cron for windows @ChetanPaliwal — 许多 UNIX 软件在 Windows 上运行。例如,Cron:cronw.sourceforge.net 是的,但在我看来,只是说 install cron 作为答案而不提供任何链接或参考,这不是一个好的回答方式【参考方案3】:

Windows 没有 Cron(它是 Linux 系统的主要任务调度程序)。 Windows 版本是Task Scheduler。 This question 推荐使用 at 命令。

因此 Cron 与 Apache、mysql、PHP 设置没有任何关系,我认为无法可靠地测试您在 Windows 中为 Linux Cron 创建的 cronjobs(可能使用Cygwin)。

【讨论】:

旁注:当前使用任务调度程序的程序是schtasksat 已被弃用几年,因为它仅代表旧版本的任务调度程序中存在的功能。 【参考方案4】:

只需从命令行运行作业。这是您要测试的工作,而不是 cron 本身。如果您需要让它定期执行以模拟 cron,请使用 Windows“计划任务”工具

【讨论】:

【参考方案5】:

试试这个命令

<?php

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

?>

【讨论】:

【参考方案6】:

&lt;meta http-equiv="refresh" content="0; url=http://localhost/myproject/cron.php" /&gt;

立即设置元引用: 内容 = 0 每 5 秒: 内容 = 5

【讨论】:

这是重定向而不是 Cron 作业。 Cron 作业,静默执行。整个概念是能够执行某些任务,而无需用户干预。这将在窗口中打开页面并进行处理。【参考方案7】:

你可以直接从 URL 运行你的脚本,这意味着如果你想从 cron 设置运行 cron_test.php 脚本并且你想测试相同的结果,那么你可以直接从 localhost 运行这个文件,比如http://localhost/XXXX/cron_test.php。

【讨论】:

【参考方案8】:

您只需一行就可以在 Windows 环境中 cron 执行您的作业。我几乎花了我 5 个小时,所以我想与其他人分享是做一个任务。

在程序中给出php.exe路径,我的安装是c:\wamp\bin\php\php5.3.5\php.exe。 其次,您必须放置要运行的文件绝对路径。参数中的-f c:\wamp\www\foo\foo.php

这样就完成了。无需安装任何东西。

【讨论】:

【参考方案9】:

你可以运行这个:

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 之前它永远不会停止。

【讨论】:

完善我的投票 - 这是一个 .php 文件,由在浏览器中运行触发。它会完成这项工作,但请记住,它会使一些 Apache 进程继续运行。【参考方案10】:

您可以创建一个 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。

【讨论】:

以上是关于如何在 WAMP 等本地服务器中测试 cron 作业?的主要内容,如果未能解决你的问题,请参考以下文章

无法在本地 wamp 服务器上运行我的 Magento 文件进行测试

如何让我的引导程序和 jquery 在 Wamp 虚拟主机中工作?

Cron 作业失败 - PHP 版本错误?

如何测试 robots.txt 是不是在 localhost 的本地 Web 服务器中工作?

无法让 curl 在 wamp 中工作

在 WAMP 中工作正常,但在 XAMPP 中不起作用