Cron Jobs在我的服务器上关闭,服务器管理员不接受打开它。因为,cron的工作减慢了服务器等。所以,我需要一个替代方案。
我必须每2分钟运行一个php文件(cron.php)。
那么,我该怎么做呢?
即使这个问题是在不久前发布的,我也遇到了同样的问题但是找到了一个解决方案(基于Kissaki's answer,谢谢!)并且认为我会在这里发布它给任何仍在寻找可能解决方案的人。
先决条件:
代码(python):
from subprocess import call
import time
while True:
call(["php","cron.php"])
time.sleep(120)
取决于您对盒子的访问权限。
PHP本身将无法独立运行。你可以做一个试图不断增加执行时间,睡觉和定期检查新工作的脚本。但这是次优的,因为您必须通过浏览器访问它一次,并且脚本必须确保它只运行一次。
使用shell访问,您可以在shell上运行php脚本,这将阻止它从公共可调用,并且必须通过webbrowser运行它。
通过shell访问,您还可以运行为您提供(cron)服务的程序。无论是Java,Python还是其他程序。
Cron作业不应该总是减慢服务器的速度。这取决于运行的工作。如果这是你的工作如此昂贵,你的管理员可能无法解决关闭的cron工作并且无论如何再次放慢服务器速度,并可能采取进一步措施来阻止你解决问题。
Subscibe到(免费)网站监控服务,并安排您的[url] /cron.php。您可以让您的网页页面返回有意义的内容,并配置监控服务以通知您该响应。
似乎这可能是你的解决方案 - Free & Easy Cronjob Execution.
我得到它,它是一个网络服务,将通过您设置的时间表唤起您的网站URL。
在这里发现提到这件事 - https://stackoverflow.com/a/6853113/123618
只是答案的补充。罕见的情况。
如果您的应用程序具有频繁的数据库操作,那么您可以维护一个单独的表,其中一列将用作运行脚本的度量。示例如下
表CRON_RUN
last_run
----------
12-09-2018 11:55:12 (dd-mm-yyyy H:M:S)
现在,在您的应用程序中,每次发生频繁的数据库操作时都可以执行检查,并检查last_run日期和当前日期是否有x差异。 X是您要运行脚本的时间差异。在你的情况下2分钟。此外,如果差异大于或等于2分钟,则update语句将运行以使用当前日期时间更新last_run列,下一个语句将是cron.php脚本。
您可以使用AWS Lambda完成此操作。使用Amazon Web Services(AWS),我们可以将所有cron作业移到EC2 Linux服务器中。通过3个步骤将您的Cron作业移至无服务器:[https://thenewstack.io/move-your-cron-jobs-to-serverless-in-3-steps/][1]
Linux有几种Cron替代品。喜欢,
有关未来的阅读,请参阅this article。
如果你有很多访问者,只需在上次访问时写入数据库,如果嵌套时间更需要时间 - 运行cron。但实际上 - 找到新的主机。