【问题标题】:Unable to run a php script using cron无法使用 cron 运行 php 脚本
【发布时间】:2012-06-03 20:01:45
【问题描述】:

我有 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 是否正在运行,并且根据“系统服务”和“系统进程”它正在运行。

【问题讨论】:

  • 试试这个*/1 * * * * lynx -dump http://myfakesite.com/script1.php 但你确实需要lynx
  • 您是否尝试过使用像/usr/local/bin/wget 这样的banaries 的完整路径或您有什么?
  • 我没有,现在就试试这个
  • 试过但对我不起作用,已编辑问题以更新此内容。

标签: php cron vpn


【解决方案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 执行的详细信息,以及系统一般情况。

【讨论】:

  • 我仍然不完全确定最初的问题是什么,但它现在似乎正在工作。我之前使用*/1 * * * * /usr/bin/wget -q http://myfakesite.com/script1.php -O /dev/null 没有运气,昨天突然它开始工作了。我想也许有什么东西重新启动了 cron,因为它没有通过电子邮件向我发送错误消息,并且突然它们也启动了。
【解决方案2】:

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

*/1 * * * * php -q pathToTheFile/script1.php

【讨论】:

  • 还是没有运气。该脚本位于同一台服务器上,所以我不明白为什么这不起作用。似乎服务器已停止运行 cron 作业,因为当我给它一个无效命令时,它不再向我发送错误消息。
  • 检查脚本文件的用户和组,应该是root。
  • 将用户和组从当前用户更改为“root”会完全停止脚本的工作,即使我在浏览器中手动调用它也是如此。
  • 是的,但是当使用 root 用户登录时,它应该与 php -q 一起使用。我说的对吗?
  • 今早试过了,还是不行。我感觉 cronjob 不再运行,因为我没有收到错误电子邮件。这使得无法判断您的建议是否有效:-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2012-06-27
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多