![cronjob 或类似程序打开本地 php 文件(包括查询)](https://linux22.com/image/640313/cronjob%20%E6%88%96%E7%B1%BB%E4%BC%BC%E7%A8%8B%E5%BA%8F%E6%89%93%E5%BC%80%E6%9C%AC%E5%9C%B0%20php%20%E6%96%87%E4%BB%B6%EF%BC%88%E5%8C%85%E6%8B%AC%E6%9F%A5%E8%AF%A2%EF%BC%89.png)
如何每5分钟正确使用 cronjob 打开以下文件:
/var/www/mysite/folder/foo.php?query=1
我自己试过了,但就是没用。我试过/usr/share/php5
,wget
但都没用。我检查了 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 吗?