1

我四处寻找,但找不到我要找的确切内容。

我有一个 PHP 设置页面,我的站点的管理员可以选择一天中的一个小时来执行每日 Cron 作业脚本。在我crontab的脚本中,我每小时运行一次。当脚本运行时,它会检查当前时间是否等于设置页面请求的时间。

我这样做的原因是因为我绝对无法找到crontab通过 PHP 编辑文件的方法,尽管对主题进行了大量测试和研究。如果你能帮我想办法做到这一点,那就加分。

我提出这个问题的真正原因是因为我的 Unix 服务器的时间存在一些问题。在我的 localhost 机器 (IIS) 上,Cron 脚本按预期每小时执行一次,但是当我将所有内容移到我的 Unix Amazon 机器上时,时间正好相差五个小时。

Cron 作业仍然像预期的那样每小时运行一次,但是当 PHP 脚本检查当前时间(使用date("G"))是否与设置时间匹配时,它不会像预期的那样工作。当然,它最终会晚了五个小时才得到处理。

我不认为我住在中央时区是巧合,这也恰好是五个小时的休息时间,所以我几乎肯定它与此有关。

我可以写一个变通方法,总是将时间偏移五个小时,但这会导致我的日期字段不准确(我认为),而且有点牵强。我宁愿只是问,因为我确信很多人都在阅读这篇文章并认为我不知道答案是愚蠢的。

还有一件事:

我的脚本中有这行代码。还有什么我需要分享的吗?

date_default_timezone_set('America/Chicago');

编辑:您的“修复”是什么的解释将不胜感激。

4

1 回答 1

2

这里有几个问题我想说,要回答所有问题都需要一些时间,但我会尽量略过。

  • 要编辑 crontab,您需要为 webserver 用户而不是 root 用户编辑 crontab,或者如果您打算编辑 root crontab,您需要配置 sudo,以便 webserver 用户可以专门编辑该 crontab。您现有的范例可能更好,只需安装一个 cron,然后将大部分逻辑放入 cron 调用的 PHP 脚本中。
  • 如第一条评论所建议的,您遇到的问题与 php 日期不同是对另一个线程的欺骗。如果您有权访问 php.ini,则应在此处相应地设置 date.timezone。此外,如果用户不在运行该框的时区中,则无论如何您都必须调整时区偏移量。
  • 顺便提一下的另一件事是,您可以通过 PHP 通过类似$sLinuxDate = shell_exec('date');. 正如我所提到的,您可能想通过 php.ini 正确设置 PHP 和操作系统之间的时区。
于 2012-06-26T15:57:39.610 回答