9

我需要每天晚上在我的服务器上运行一个 php 脚本。在 linux 系统上,我设置了一个 cron 作业,但我被 Windows 系统困住了。

我知道我必须使用 Windows 任务调度程序设置一个任务,并且该任务需要运行一个 .bat 文件,该文件又将运行 php 文件,但我一直在尝试编写 .bat 文件。

我目前拥有的是:

@echo off
REM this command runs the nightly cron job
start "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php

但是当我尝试手动运行 .bat 文件来测试它时,我收到一个 Windows 警报说

“Windows 找不到‘-f’。确保您输入了正确的名称,然后再试一次。

我错过了什么?

4

6 回答 6

9

START命令可选地接受创建窗口的标题作为其第一个参数;在这种情况下,它认为这C:\Program Files (x86)\PHP\v5.3\php.exe是要显示的标题,-f(第二个参数)是您要运行的可执行文件。

因此,您可以通过提供占位符标题来解决此问题,例如

start "email reminder task" "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php

或者,最好START完全放弃该命令(您没有使用它的任何独特功能),直接运行 PHP:

"C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php
于 2013-08-28T13:21:06.967 回答
6

实际上,您甚至不需要批处理文件。您可以从任务调度程序运行 php 脚本。

只需让任务调度程序运行 php.exe 并将 php 文件的位置设置为任务的参数。

于 2013-08-28T13:26:28.953 回答
3

我可以建议一个小的改变。

echo off
REM This adds the folder containing php.exe to the path
PATH=%PATH%;C:\Program Files (x86)\PHP\v5.3

REM Change Directory to the folder containing your script
CD C:\inetpub\wwwroot\sitename\crons

REM Execute
php reminder-email.php

PS。将 Apache、MySQL 或 PHP 放入Program Files是一个坏主意。不要使用名称中带有空格的 windows 文件夹。

于 2013-08-28T13:21:24.430 回答
2

这个怎么样?

set php="C:\Program Files (x86)\PHP\v5.3\php.exe"
%php% -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php
于 2018-06-16T00:26:30.003 回答
0

可悲的是,这花了将近 10 个小时才弄清楚。某些协议(例如 WinRM 和 PSEXEC)必须传递登录的用户帐户,而不管提供的凭据如何(该凭据或 PHP 会覆盖您输入的任何内容)。无论如何,要获得 PSEXEC、WinRM 或只是启动连接到远程计算机的批处理文件,您需要将 IIS 运行帐户更改为有权访问这些资源的用户(服务帐户)。我意识到这是一个巨大的安全漏洞,但这是设计使然。PHP 是安全的,因此不容易被黑客入侵,您必须通过指定运行身份帐户来覆盖其安全性。与您的应用程序池帐户不同 - 尽管您的 IIS 凭据可以使用您的应用程序池帐户。

于 2017-01-12T03:35:21.563 回答
0

试试这样的家伙!

cd E:\xampp\htdocs\my-project
E:
php工匠时间表:运行
于 2017-08-28T13:35:07.830 回答