【问题标题】:Correct Cron job command in order for PHP require() to work更正 Cron 作业命令以使 PHP require() 工作
【发布时间】:2019-08-28 01:42:15
【问题描述】:

我正在使用 GoDaddy 共享主机。在我的 cron 作业 PHP 脚本中,我使用 require() 来包含一些其他文件。当我手动使用 cron 作业 PHP 脚本时(通过将其 url 输入地址栏),它可以正常工作,但是在执行 cron 作业时,cron 脚本可以正常工作,只是找不到所需的文件。

我有以下 cron 命令:

/usr/local/bin/php -q /home/username/public_html/domainname/cron/script.php >/dev/null 2>&1

我读到here,其中一种选择是在 require() 中使用完整路径。另一种选择是修改cron命令,这是我想学的。我的问题是如何修改上述 cron 命令,以便我在 cron 脚本中的 require() 能够正常工作(不使用完整路径)。

谢谢。

【问题讨论】:

  • without using full paths 考虑为您的路径创建一些常量并仅包括该文件。 define('ROOT_PATH', '....') 等...如果您不使用它,您也可以简单地使用__DIR__。所以看看你如何使用require 可能会有所帮助(提示。不需要括号)。我唯一一次遇到__DIR__ 这样的问题是在符号链接或绑定安装文件夹中(不记得了)。但这不是 PHP 的错(它就像你的高清中的虫洞......哈哈)
  • @ArtisticPhoenix 感谢您的意见。使用 DIR 是一个不错的选择,但我仍然想学习如何编写正确的 cron 命令。
  • 对于 C-Panel,这是正确的方法,对于非 Cpanel,您只需将此位关闭 /usr/local/bin/ - 也就是说我一直使用 __DIR__,所以我从来没有遇到过这些问题。
  • @ArtisticPhoenix 但是,正如我的问题中提到的,当我使用上述命令时,它找不到所需的文件 - 包含在 cron 脚本中的文件 require()-.

标签: php cron


【解决方案1】:

这可能是修复它的最简单方法。

chdir(dirname(__FILE__)); //its been a while but I think __FILE__ works better with bind mounts and symlink but don't quote me on that.
//chdir(__DIR__);

我不太记得了,但我想我不得不将它用于一个 wordpress 网站,我为此做了一个 cron 工作。如果我没记错的话,它有一些相关目录,来自 3rd 方插件等......

否则,您可以在文件前使用__DIR__

我从不使用相对目录,我要么使用常量

 define('BASE_DIR', __DIR__); //or something else besides __DIR__

或者我只是使用__DIR__,从来没有遇到过这类问题。我喜欢确切地知道我的文件在哪里。

require __DIR__.'/somefile.php';
require BASE_DIR.'/somefile.php';

这并不是真正的 PHP 问题,更多的是 cron 如何调用 PHP 文件的问题,因为相对路径将相对于 crontab 文件的位置。

夏天

说到使用__DIR__,根据我自己的经验,你无法控制第三方如何包含文件,所以chdir可能是这种情况下唯一可行的解​​决方案。

希望对你有帮助。

【讨论】:

  • 感谢您详细解释使用DIR。我关于正确 cron 命令的问题仍然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多