cronjob 或类似程序打开本地 php 文件(包括查询)

cronjob 或类似程序打开本地 php 文件(包括查询)

如何每5分钟正确使用 cronjob 打开以下文件:

/var/www/mysite/folder/foo.php?query=1

我自己试过了,但就是没用。我试过/usr/share/php5wget但都没用。我检查了 nginx 访问日志,看文件是否被调用,但没有。

是的计划任务服务正常运行。foo.php并且755(可执行)

我尝试通过输入以下内容来调用该文件:

/usr/share/php5 /var/www/mysite/folder/foo.php?query=1

但它只是说:

/usr/share/php5: Is a directory

那么我做错了什么?该怎么办?

调用 php 文件(包括查询)很重要,因为这本身就是 wordpress 的 cron 进程。仅调用它对foo.php我没有帮助。

我已经尝试了 2 个小时,但我放弃了。请大家帮帮我。

PS:使用debian wheezy、php5 fpm,通常。

答案1

一种方法是使用 CLI 脚本中可用的 PHP 的 $argv 数组。

示例 cron:

* * * * * * /var/www/mysite/folder/foo.php 1

在您的 php 文件中,$argv 变量将可用,其中 $argv[1](第二个元素)将是提供的参数。因此,如果您可以修改此脚本以使用 $argv,那么这是一个很好的解决方案。

如果您必须使用 url 参数,那么您必须请求实际的页面,因此您必须有如下内容:

* * * * * * curl http://localhost/mysite/folder/foo.php?query=1

Assuming that http://localhost/ is located in /var/www/

希望这能回答你的问题。

答案2

你混淆了共享目录对于 php 和php 二进制. 您可能应该使用的文件是/usr/bin/php

您的脚本路径可能也是错误的,正如@jin-pow 告诉您的那样。您可能必须使用/var/www/whatever/foo.php

如果你运行它时传递​​了?query=1,它将不起作用,因为 PHP 会抱怨它无法找到脚本。而且你的脚本将没有变量$_GET['query']。你必须使用数组$argv

总结一下,你的 cron 条目应该是这样的:

/usr/bin/php /var/www/whatever/foo.php 1

在你的 PHP 脚本中:

<?php
$query = $argv[1];
....

?>

答案3

噢天哪,我刚刚自己回答了这个问题。

wget 无法与 url 一起使用,因为它是一个洋葱网站,所以它说主机未找到/无法访问。

wget 无法通过 /var/www/...... 工作,因为它说缺少 Scheme。

通过使用服务器 IP:Port 而不是 URL,问题已得到解决。我的 cron 作业现在运行正常。

有人能告诉我只使用 wget IP:PORT/etc 就可以吗,或者我应该执行 wget -O /dev/null 吗?

相关内容