安排PHP脚本通过cron执行

时间:2012-11-26 18:40:11

标签: php mysql curl updating

我有一个脚本可以更新我的数据库中的某些列。它是用PHP编写的,我通过URL (例如http://foo.com/xyz/yzx/dbupt8r执行它。我在脚本URL上使用crontab -e然后curl执行此操作,因为在我看来,它与我正在做的事情类似:通过URL访问它。这样做是否有任何明智或更好的方法?我处于安全或威胁缺陷吗?

4 个答案:

答案 0 :(得分:1)

您始终可以使用php命令运行它。让你的crontab运行一个“/path/to/script.sh”,其中包含:

 #!/bin/bash
 cat "/path/to/phpscript.php" | php -e

如果需要,可以保存输出。你也可以让CRON运行“php -f /path/to/script.php”

答案 1 :(得分:1)

这取决于您有权访问的内容。就个人而言,我不想依赖外部卷曲脚本来完成所需的定期工作。这种方法的一个缺点是,您冒着向全世界运行dbupt8r脚本的权限。请记住,您可以运行PHP脚本,而不必将它们放在Web服务器的上下文中,这样您就可以在Web服务器上创建一个cron作业

php /my/folder/dbupt8r.php

在这种情况下,无论Web服务器是否可用,您的定期作业都将运行,并且没有任何将其暴露给外界的风险。

答案 2 :(得分:1)

有两种方法可以做到这一点,您已经采用的方式:(curl可公开访问的网址);或直接从crontab执行PHP脚本。

Cron Curling

正如您所提到的,这通常非常方便和舒适,因为您已经在使用PHP开发Web应用程序,因此它就是您已经在工作的方式。有一些风险:

  • 最重要的是,安全性:您希望确保输入已正确过滤,不存在SQL注入等风险,以防有人发现该网址并尝试采取它的优点。希望您在开发Web应用程序时能够涵盖大部分内容。
  • 频率&并发性:你正在从cron安排它的执行,所以如果其他人开始调用URL并使其更频繁地发生攻击或者在计划的运行发生的同时发生任何问题?
  • 依赖curl :这也意味着您依靠curl来执行您的脚本,因此您可以自行打开多个点失败(curl本身,DNS等)。

从Cron运行PHP

或者,您可以直接从crontab运行脚本。有两种方法可以做到这一点:

  • 将PHP脚本传递给PHP解释器二进制文件,看起来像这样(注意PHP二进制文件的路径因平台而异,但应该指定为绝对路径,因为cron没有访问许多环境变量):

    */15 * * * *    /usr/bin/php -f /path/to/php/script.php
    
  • 或者,您可以将hashbang / shebang行添加到PHP脚本的第一行,如下所示:

    #!/usr/bin/php
    

    使其可执行,例如:

    chmod 755 /path/to/php/script.php
    

    并将其直接添加到您的crontab:

    */15 * * * *    /path/to/php/script.php
    

此方法的优点是您可以将脚本放在不可公开访问的位置,这样您就可以确保更严格地控​​制其访问权限。执行。如果你不必处理网络方面的事情,这也可能意味着你可以编写更轻松的代码。也就是说,如果您正在使用PHP框架,您可能会发现很难开发这样的独立脚本。

答案 3 :(得分:0)

调用URL会使您面临超时问题,这可能会导致数据库中出现事务错误。我建议您使用命令行界面(CLI)进行此类过程。