0

我有 2 个 php 脚本需要每隔几分钟运行一次,php 本身很好,因为我可以通过http://myfakesite.com/myphpfile.php在浏览器中键入来手动触发它。两者都可以正常工作。

我对 cron 没有太多经验,但我找到了 crontab 文件(我在 VPN 上使用 Parallels Power Panel),它已经有工作来运行 cron.hourly、每日、每周和每月的部件。我将我的电子邮件地址添加到 MAILTO 字段,并收到一条消息,告诉我 cron.hourly 不是目录——即使它是(尽管它目前是空的)。

我还在这个文件中添加了我自己的 2 个工作,如下所示:

*/1 * * * * wget http://myfakesite.com/script1.php
*/5 * * * * wget http://myfakesite.com/script2.php

这些都没有被调用。在 php 脚本中,一旦调用脚本,我也有一行要给我发送电子邮件,这样我就知道它正在工作,并且从未通过 cronjob 收到过电子邮件。如果我 ssh 进入服务器并使用 wget,则 php 工作并通过电子邮件向我发送确认。

我也试过

*/1 * * * * php http://myfakesite.com/script1.php

*/1 * * * * wget -O /dev/null http://myfakesite.com/script1.php>/dev/null 2>&1

没有运气。crontab 文件中的 MAILTO 从未向我发送消息说运行脚本时出现问题,但显然它没有这样做。

任何人都可以提供帮助吗?我不知道接下来要尝试什么。

编辑:发现一些信息说“不是目录”错误可以归结为损坏的 crontab 文件。所以我下载了它,将信息复制到一个新文件并上传。“不是目录”错误消失了......完全。即使我告诉它查找我知道不存在的文件夹,例如 cron.myfakefolder,我也不会收到Not a directory: /etc/cron.myfakefolder电子邮件。用原始文件替换了我的新 crontab 文件,但我仍然没有从 cronjob 中得到任何反馈。

编辑 2:正如 dAm2K 和 prodigitalson 建议的那样,我尝试使用 wget 和 php 的绝对路径。两者都没有工作,我已经仔细检查了 usr/bin/wget 和 usr/bin/php 的位置,以确保它们确实在那里。我还检查了 var/log/cron 和 var/log/messages,两者都包含以下内容:

2002 无法执行“下载”操作:请求的文件“/var/log/cron”太大,需要立即发送。尝试以 512KB 为单位请求文件

不知道这是怎么回事。正如我在编辑 1 中提到的,即使我故意添加了错误的位置,我也不再收到错误电子邮件。这与日志文件中的错误有关吗?

另外,我检查了 crond 是否正在运行,并且根据“系统服务”和“系统进程”它正在运行。

4

2 回答 2

1

尝试使用带有 cron 的可执行文件的绝对路径:例如

*/5 * * * * /usr/bin/wget 'http://myfakesite.com/script1.php'

代替

*/5 * * * * wget http://myfakesite.com/script1.php

仔细检查 /var/log/messages 或 /var/log/syslog 日志文件以获取有关 cron 执行的详细信息,以及系统一般会发生什么。

于 2012-05-29T15:11:44.470 回答
1

如果您的脚本在同一台服务器上,请尝试使用以下命令执行它php -q

*/1 * * * * php -q pathToTheFile/script1.php
于 2012-05-29T15:44:48.700 回答