在 Windows 中使用 php 设置 cron 作业

Posted

技术标签:

【中文标题】在 Windows 中使用 php 设置 cron 作业【英文标题】:Use php to set cron jobs in Windows 【发布时间】:2012-04-11 07:05:08 【问题描述】:

我正在寻找一种使用 php 设置 cron 作业的方法。我想做的就是在特定时间运行一个 PHP 脚本。用户首先在脚本中输入一个时间,服务器根据指定的时间运行脚本。我正在使用 Windows 7 和 xampp。

我发现的是:

    创建一个调用 cron.php 文件的 php 文件:使用记事本(或其他),将以下内容粘贴到新文件中: $data = file(“http://pearl.supplychain.com/cron.php”); 你需要把它放在普通的 php 标签中,用“小于号”吗? php 在前面,而 ​​?最后是“大于符号”。 (我似乎不能直接输入,因为它是“可疑内容”,而 drupal 不允许这样做) 将其另存为 executecron.php,与 cron.php (htdocs) 位于同一目录中。

    设置一个定期调用它的计划任务:

      打开开始-所有程序-附件-系统工具-计划任务。 双击计划任务。

      设置从上午 12:00 开始的每日任务,每隔半小时(或其他时间)运行一次,直到晚上 11:59。告诉任务“运行”以下内容:

      C:\cms\xampp\php\php.exe c:\cms\xampp\htdocs\executecron.php
      

      (在本系统中,php.exe 安装在 C:\cms\xampp\php,但您可能需要更改路径)。

如您所见,要做到这一点,必须Open Start–All Programs–Accessories–System tools–Scheduled tasks.

是否可以通过 php 代码或使用其他方式来执行此操作?因为我希望在 php / 服务器上完成所有工作,而不是需要我的用户自己配置 cron 作业。这意味着我希望我的 php 代码可以在服务器中设置 cron 并且服务器会查看 cron?

致 stefgosselin:

创建批处理文件

Open Notepad.
Paste the line "C:\xampp\php\php.exe C:\wamp\www\index.php"
Click "File" -> "Save As"
Ensure "Save as type:" is set to "All Files"
Save the file as "cron.bat" to your C drive

调度批处理文件运行

Open Command Prompt
Paste the following "schtasks /create /sc minute /mo 20 /tn "PHP Cron Job" /tr C:\cron.bat"
Press Enter
This will make the script run every 20 minutes, the first time 20 minutes from now.

我可以使用 php 创建一个浴缸文件,但是,有什么方法可以Paste the following "schtasks /create /sc minute /mo 20 /tn "PHP Cron Job" /tr C:\cron.bat 使用 php 而不是使用 os?谢谢你

谢谢

【问题讨论】:

感谢编辑,我只是​​想要什么,使用php设置时间,使用php调整服务器,服务器将运行cron作业,正如我在许多主机网页中看到的那样,它们也只提供供用户输入时间的 php,我认为他们不会手动添加 cron 作业?谢谢 uhh,取决于您的托管位置,但通常对我来说最简单的方法是使用 wget 命令进入并设置 cron。或者,如果您有托管的 cron 选项卡,请执行此操作。 请参阅 Microsoft TechNet 库中的 Task Scheduler - Schedule a Task - Using a command line。 其实我并没有使用任何主机,只使用了 xampp 服务器和 localhost 来实现我的工作,那么有没有办法做到这一点? 感谢链接,我已经快速阅读了,看来我只使用php没有办法做到这一点? 【参考方案1】:

我在 waytocode.com 上找到了我对这个问题的答案

他们提供了 3 种可能的解决方案来在 Windows 上运行 cron 作业:

Solution-1使用任务调度器

在您的 Windows 7/windows 2005/2008 中。

转到开始菜单->所有程序->附件->系统工具->任务计划程序->创建任务

在新窗口中:

    常规(给出任务名称,为了进行测试,您可以选择“用户登录时运行”)

    触发(可以选择运行间隔为“每天、每周、每月”。)

    操作(这是最重要的部分。选择 Mozilla firefox 作为“程序/脚本”,并在参数中提供使用 Mozilla firefox 触发的 URL)。

Solution-2 使用 XAMPP 服务器中的任务调度程序和 PHP

在 Windows Xp 中,无需复制或安装任何东西(PHP 已经像 XAMPP 一样安装在服务器上)

转到任务调度程序

创建一个任务给定运行时间,然后在高级设置选项中的“RUN”命令文本框中输入

C:\xampp\php\php.exe -f c:/xampp/htdocs/waytocode/mycron.php

在 Windows 7/服务器 2005/2008 中

无需复制或安装任何东西(服务器上已经安装了PHP)

在触发器设置中创建一个任务给运行时间。然后在“程序/脚本”命令文本框类型中的动作设置选项中

C:\xampp\php\php.exe

并在“添加参数(可选)”类型中

-f c:/xampp/htdocs/mycron.php

解决方案–3安装一个 Windows exe 文件,该文件将模拟 *nix 系统中的 cron 作业

我不喜欢在我的服务器或开发机器上安装任何 exe 文件, 但我会在他们发布时提供解决方案:

在 Windows Xp 中,用 wget.exe 将所有 2 个 DLL 文件复制到 C:\windows 文件夹

创建任务给定运行时间,然后在“RUN”命令文本框类型中的高级设置选项中

C:\Windows\wget.exe -q -O NUL http://localhost/mycron.php

在 Windows 7/server 2005/2008 中,将 wget.exe 的所有 2 个 DLL 文件复制到 C:\windows 文件夹中

创建任务给定运行时间,然后在“程序/脚本”命令文本框类型中的高级设置选项中

C:\Windows\wget.exe

并在“添加参数(可选)”类型中

-q -O NUL http://localhost/mycron.php

Solution-4 使用 .bat 文件和任务调度程序

我在 *** 上找到它,它与前 2 个类似:

    创建一个cron.php文件(要定期执行的代码)

    创建一个 CRON.BAT 文件,复制并粘贴文件中的以下代码

    D:\xampp\php\php.exe D:\xampp\htdocs\Application\cron.php

我写的路径是根据我的xampp和cron.php文件,根据你的系统目录更新文件路径

    计划任务 点击开始 > 所有程序 > 附件 > 系统工具 > 计划任务

或者你可以直接去 控制面板 > 计划任务

右键单击文件夹 新建 > 计划任务

为任务指定适当的名称。 在 RUN 文本字段中... 键入 CRON.BAT 文件的完整路径 在我的情况下是

D:\xampp\htdocs\Application\CRON.BAT

设置作业的时间表,如果需要,您可以使用高级按钮。

解决方案 5

我也不喜欢它,因为一个脚本不能依赖于其他网站,但无论如何它是一种解决方案。

使用外部在线 cron 作业服务。

https://www.google.ca/search?q=cron+job+online+service

选择一种更适合您的解决方案。希望这会对某人有所帮助。

更新

Solution-6(基于以下答案,也可与 CodeIgniter 一起使用!)

创建cron.bat文件并编写以下命令并保存。

@ECHO OFF
c:
cd C:\Program Files\Internet Explorer
START iexplore.exe http://localhost/path/to/cron/job/1

在触发器设置中创建一个任务给运行时间。然后在“程序/脚本”命令文本框类型中的动作设置选项中

C:\xampp\path\htdocs\folder\includes\cron.bat

结束更新

回答你的问题:

是否可以通过 php 代码或使用其他方式来执行此操作?因为我 希望所有工作都在 php / server 上完成,而不是需要我的用户配置 cron作业本身。这意味着我希望我的 php 代码可以设置 cron 在 server 和 server 中会看 cron 吗?

还有其他方法可以做到这一点:

在 PHP 中使用 cron 管理器 Using cron manager from within PHP

使用 PHP 管理 Cron 作业 http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php-2--net-19428

不幸的是,所有使用 PHP 的解决方案都需要 *nix 服务器类型和/或 cPanel,并且实施起来或多或少复杂。

【讨论】:

本地主机上的任务计划就像魅力一样!这就是我在 localhost 上运行的网络应用程序所需要的。谢谢你.. @MoxetKhan 能否分享一下您在 localhost 中的设置方式, @Rathinam 选择上面的一种解决方案并按照步骤操作。解决方案 4 是最好的。 technet.microsoft.com/en-us/library/cc766428(v=ws.11).aspx @AdrianP。可以使用 wamp 是的,可以使用 WAMP 和 XAMPP。如果您遇到任何问题,请尝试解决方案 4,请在此处提及..【参考方案2】:

好的,如果我理解正确,您希望在系统上创建一个 cron 作业,而无需用户创建任务。

基本上,这可以在 .bat 文件中轻松完成(甚至可以从 php 调用)。 schtasks 应用程序可以轻松地自动创建计划任务。例如:

schtasks /create /tn UNO /tr YOURAPP.EXE /sc HOURLY /mo 2

请参阅official MS support page 了解有关此漂亮应用程序的更多信息。

另一个对用户来说更容易的选项是使用安装程序。我自己并没有创建那么多 Windows 应用程序,但我确实很高兴与 NSIS 一起玩,而且这个应用程序还具有创建计划任务的选项,以及许多其他功能,这里不胜枚举。如果您需要用户可安装的软件包,强烈推荐。

希望对您有所帮助,祝您编程愉快。

【讨论】:

是的,这就是我想要做的,我有一个 sendmail.php,并且用户输入日期,服务器将在那个日期运行 sendmail.php。我想知道的是用户提交日期后的工作流程,主机端必须在os中手动添加用户作业请求? 您的 cron 脚本将每天检查一次并选择 db_message date >= 今天日期的所有消息,然后遍历结果集并发送消息。另一个小细节,我建议您在消息表中使用boolean field 作为“标志”,指示消息是否已发送。这样,您可以选择所有未发送的消息,其中 messageDate >= currentDate,您肯定不会对任何人进行邮件炸弹攻击,发送消息时您将标志设置为 1。如果您有任何问题,请随时给我发消息。 @stefgosselin,NSIS 是做什么的? @Pacerier - 它在应用程序中编写安装程序,它打包一个可执行文件以在 Windows 上安装应用程序。应用程序 (NSI) 具有自动创建计划任务的功能,当然任务计划程序可以手动配置为每隔“x”时间运行“x”应用程序,但使用 NSI,您可以轻松复制相同的规则并拥有能够在任何机器上运行生成的 .exe 并自动创建计划任务的好处。 @Pacerier - 是的。它自动创建计划任务。作为奖励,卸载程序会删除预定的品尝。例如,我之前使用 NSI(轻松)创建了一个安装 cleansweep、磁盘碎片整理程序并为两者创建计划任务的包。【参考方案3】:

另一个很棒的工具是在 Windows 上免费提供的,nncron。它使用与 unix 的 cron 完全相同的语法:

http://www.nncron.ru/

我发现管理这个可怕的 schtask 更容易:)

精简版是我建议使用的版本。完整版支持在配置文件中编写脚本。对于正常的 cron 作业,它可能很方便,但不知何故被杀死了。

【讨论】:

这个怎么用?我无法获得任何文件。【参考方案4】:

在 Windows 中创建 Cron 的步骤:

第一步>创建.bat文件

    1. open notepad.
    2. click File -> Save As.
    3.Give the file a name i.e. MyBatchFile.bat Underneath the filename box change the file type to All Files. The .bat on the end of the filename will instruct the PC to open it as a batch file.

步骤 2> 在 MyBatchFile.bat 中写入以下命令

    ECHO OFF
    START File Full Path write here like http://www.google.com

步骤 3> 打开开始——所有程序——附件——系统工具——计划任务。 单击右侧栏中的创建任务。 姓名:任何一个 触发器:从下拉菜单中设置时间并选择每天 行动:选择.bat文件 点击确定按钮

【讨论】:

【参考方案5】:

在 Windows 操作系统中创建 Cron 的步骤:

第一步> 创建.bat文件

    1. Open notepad.
    2. Click File -> Save As.
    3. Give the file a name i.e. MyBatchFile.bat Underneath the filename box change the file type to All Files. The .bat on the end of the filename will instruct the PC to open it as a batch file.

步骤 2> 在 MyBatchFile.bat 中写入以下命令

    ECHO OFF
    START File Full Path write here like http://www.google.com

第 3 步> 打开开始——所有程序——附件——系统工具——计划任务。 单击右侧栏中的创建任务。 姓名:任何一个 触发器:从下拉菜单中设置时间并选择每天 行动:选择.bat文件 点击确定按钮

【讨论】:

【参考方案6】:

另一种非常简单的方法是 powershell,用于获取 php 文件的内容。

任务调度器,目标:Powershell.exe,使用参数:

-Command "(New-Object Net.WebClient).DownloadString('http://myhost/cron/cron.php')"

(Ups,旧帖子)

【讨论】:

【参考方案7】:

这是我为自己的 windows 10 项目尝试的完整解决方案。

1) 进入“开始”菜单并搜索“task scheduler”并打开它。

如果您遇到任何权限问题,请将其打开为“以系统管理员身份运行”。此选项正好在“打开”下方。

您仍然面临权限问题,请联系您的系统管理员。

2) 点击右侧边栏中的“新任务”,会打开一个窗口。

3) 在此窗口中,默认选择“general”标签。给任务起一个合适的名称,如果需要,提供简短的描述。

4) 转到“triggers”,在此处设置您想要运行它的频率并启动日期时间,如果要求过期日期时间。并设置所有要求参数。

5) 转到“操作”标签。这是最重要的部分。

在“Program/script”中,写入“php.exe”的绝对路径。

在“Start in”中,写下你想要的cron php文件所在文件夹的绝对路径。

在“Add arguments”中,写下你想运行的 php 文件名。

在“添加参数”中,您还可以指定参数到 php 文件名后分隔的文件空间。如果它有文本或特殊字符,用双引号括起来。

如果您向脚本提供参数,您将分别在 $argv[1]、$argv[2] 等中收到它们。

更多详情请访问:https://medium.com/@shraddha_kulkarni/run-php-cron-in-windows-513fb1aa53a5

【讨论】:

以上是关于在 Windows 中使用 php 设置 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 脚本上运行 Cron 作业,在 Windows 的本地主机上

弹性beantalk使用cron.yaml设置php crontab

在 CPanel 上设置 Cron 作业以执行 PHP 脚本

在 Windows 服务器上运行“cron”作业 [重复]

cron 作业在 cpanel 中无法正常工作

基本 cron 作业设置为每天执行 php 文件