我有一个脚本可以更新我的数据库中的某些列。它是用PHP编写的,我通过URL (例如http://foo.com/xyz/yzx/dbupt8r)执行它。我在脚本URL上使用crontab -e
然后curl
执行此操作,因为在我看来,它与我正在做的事情类似:通过URL访问它。这样做是否有任何明智或更好的方法?我处于安全或威胁缺陷吗?
答案 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脚本。
正如您所提到的,这通常非常方便和舒适,因为您已经在使用PHP开发Web应用程序,因此它就是您已经在工作的方式。有一些风险:
curl
:这也意味着您依靠curl
来执行您的脚本,因此您可以自行打开多个点失败(curl
本身,DNS等)。或者,您可以直接从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)进行此类过程。