我的服务器上的 Cron 作业已关闭,服务器管理员不接受打开它。因为,cron 作业会减慢服务器等。所以,我需要一个替代方案。
我必须每 2 分钟运行一个 php 文件( cron.php )。
那么,我该怎么做呢?
即使这个问题是不久前发布的,我也遇到了同样的问题,但找到了一个解决方案(基于Kissaki 的回答,谢谢!)并认为我会在这里为仍在寻找可能解决方案的任何人发布它。
先决条件:
代码(蟒蛇):
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 工作并再次减慢服务器速度,并且可能会采取进一步的措施来阻止您解决问题。
Linux 有多种 Cron 替代方案。喜欢,
Anacron - Anacron 是一个定期命令调度程序,就像 cron 一样。唯一的区别是它不需要您的计算机始终运行。
fcron - Fcron 是 cron 和 anacron 中最好的。它不需要您的计算机 24×7 全天候运行,并且可以每小时或每分钟处理任务。
克龙
乔布斯等
对于未来的阅读,请参阅这篇文章。
似乎这可能是您的解决方案 - 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 分钟,则更新语句将运行以使用当前日期时间更新 last_run 列,下一条语句将是您的 cron.php 脚本。