【问题标题】:include path and cron包括路径和 cron
【发布时间】:2009-07-01 17:04:13
【问题描述】:

我正在运行一个调用 php 脚本的 cronjob。当文件被 cron 调用时,我得到“无法打开流”。当我 cd 到目录并从该位置运行文件时,一切都很好。基本上,我想要包含的 include_once() 文件是 php 脚本所在的两个目录。

有人可以告诉我如何通过 cronjob 让它工作吗?

【问题讨论】:

  • 嘿,你们太棒了,非常感谢!我将在 cron 脚本中设置环境。

标签: php


【解决方案1】:

有多种方法可以做到这一点:您可以 cd 进入您的 cron 脚本中的目录:

cd /path/to/your/dir && php file.php

或者在 PHP 中指向相对于current script 的正确包含文件:

include dirname(__FILE__) . '/../../' . 'includedfile.php';

【讨论】:

  • 嘿,soulmerge,我相信第一个示例会起作用。我已经尝试在此处发布之前使用您的最后一个建议,但无法使其正常工作。正如 Pax 下面所说,cron 显然是从一个最小的 env 开始的,直到现在我才知道。谢谢!
【解决方案2】:

cron 以从最小环境开始而臭名昭著。要么:

  • 让您的脚本设置自己的环境;
  • 有一个特殊的 cron 脚本来设置环境然后调用你的脚本;或
  • 在 crontab 中设置环境。

最后一个例子(如果没有太多需要设置的东西,我倾向于使用它)是:

0 5 * * * (export PATH = /mydir:$PATH ; myexecutable )

【讨论】:

  • 嗨。谢谢您的答复。你的意思是设置环境吗?请为我详细说明。谢谢。
  • 取决于它在 cron 下失败的原因。如果缺少环境变量,请获取您的 .profile。如果是目录,则使用“(cd /mydir;./myexecutable)”作为命令。
  • 嗨,Pax,非常感谢您的帮助和指导。由于某种原因导出路径,我无法让您的解决方案正常工作。我的服务器正在使用 BASH,我相信它使用了 export 命令,但由于某种原因它不起作用。我使用了 soulmerge 的解决方案,只是 cd'd 到目录,然后从那里运行脚本。像魅力一样工作。
  • 没关系。路径的设置是环境设置的一个示例,而不是您应该为您的特定情况做的事情。目的只是说明 cron 在变量或起始目录方面没有像您的配置文件那样提供非常好的设置环境。如果您发现从特定目录运行可以使其工作,那么 crontab 中的 cd 命令将起作用(正如您已经发现的那样)。干杯。
【解决方案3】:

您需要查看 cron 运行的路径是什么。

 echo pathinfo($_SERVER["PATH_TRANSLATED"]);

据此做包含

include $path_parts['dirname']."/myfile.php";

【讨论】:

  • 嗨,Haim,感谢您的回复。我从来不知道 pathinfo 函数。这将在未来帮助我。谢谢!
  • 您不能在 cron 作业上使用 $_SERVER。不过,获取绝对路径并复制/粘贴到 cron 脚本中没有错。
猜你喜欢
  • 2012-02-21
  • 2012-10-17
  • 1970-01-01
  • 2011-03-16
  • 2023-03-10
  • 2012-09-13
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多