【问题标题】:Have my php script not run when I access the URL, but rather at scheduled times via Cron Job当我访问 URL 时不运行我的 php 脚本,而是通过 Cron Job 在预定时间运行
【发布时间】:2015-05-05 15:15:33
【问题描述】:

其他人也问过类似的问题,但据我了解,他们的脚本是自动化的,但是当您转到 www.mydomain.com/myscript.php 时,脚本仍然运行。

或者至少当我在 cpanel 中为我的脚本设置一个 cron 作业时,我就是这样。有什么办法可以使脚本在我访问该 URL 时不运行,而是静态的,除了它的预定更新?

我见过一些解决方案,其中编辑脚本本身以检查它上次运行的时间,如果不到 X 小时前,它会显示该日志文件。
问题是我不知道在哪里可以找到该日志文件。如果这很重要,我正在使用 BlueHost。

【问题讨论】:

  • 没有标准的“日志文件”来说明脚本上次运行的时间。这是脚本本身必须创建/维护的东西。但是为什么要一个脚本来做这一切呢?在您的文档根目录之外的某个地方(cron 不在乎)有实际的工作来完成这项工作,然后在您的 webroot 中简单地呈现最后一次运行的结果。将主作业脚本保留在 doc 根目录之外完全可以防止通过点击 url 来执行它。
  • 啊,我明白了。问题是我的网络经验有限,我的 php.ini 也一样。你能推荐任何教程或东西吗?感谢您的建议。
  • Marc 的主要意思是您应该将脚本放在 webroot 之外。不需要编程知识,只需要 cPanel。

标签: php cron bluehost


【解决方案1】:

您可以在 php 脚本的顶部添加类似 if ($argv[1] == 'RUN') 的内容(在它开始执行您的内容之前)。

然后您只需在您的 cron 命令中传递该参数,即:4 4 * * * /usr/bin/php /var/www/mydomain.com/myscript.php RUN 每天 04:04 运行(n.b. 简单的 webtool 来检查您的 cron 语句是否正确 - http://cronchecker.net/

这样,您可以将脚本保留在原处,但在您浏览到它时它不会执行。

【讨论】:

  • 啊,明白了。聪明的。我会试试看。
  • 但是在我的应用程序中,当我从该 URL 提取数据时,该 URL 将是空白的,不是吗?我需要它来呈现 JSON。
  • 那么您需要将负责提供数据的代码块放在 if 语句之外 :-)
  • 我将如何做到这一点,提供它的最新版本?我的 PHP 技能充其量是有限的。
  • 很难说,因为我不知道你的脚本是什么样子的。但是,如果您将更新部分(例如,当 cronjob 调用脚本时您希望执行的内容)放在单独的函数 execute_update_things 中,您可以将 if ($argv[1] == 'RUN') execute_update_things(); 放在脚本的顶部。
猜你喜欢
  • 2011-08-15
  • 2013-11-24
  • 2012-08-09
  • 2019-07-23
  • 2021-11-21
  • 2018-04-26
  • 2011-05-28
  • 2017-04-05
  • 2019-12-24
相关资源
最近更新 更多