Cron作业在我的服务器上关闭,服务器管理员不接受打开它。因为,cron作业会减慢服务器等。所以我需要另一个选择。我必须每2分钟运行一个php文件(cron.php)。那么,我该怎么做呢?
zpjtge221#
尽管这个问题是前一段时间发布的,但我也遇到了同样的问题,但找到了解决方案(基于Kissaki's answer,谢谢!),并认为我会张贴在这里的任何人仍然在寻找一个可能的解决方案。
前提条件:
from subprocess import call import time while True: call(["php","cron.php"]) time.sleep(120)
ct2axkht2#
这取决于你对黑盒的访问权限。PHP本身将无法很好地独立运行。你可以做一个脚本,试图不断增加它的执行时间,睡眠和定期检查新的作业。但这是次优的,因为您必须通过浏览器访问它一次,并且脚本必须确保它只运行一次。通过shell访问,你可以在shell上运行php脚本,这将防止它从公共调用,并必须通过web浏览器运行它。通过shell访问,您还可以运行一个为您提供(cron)服务的程序。无论是Java、Python还是其他程序。Cron作业不应该总是拖慢服务器。这取决于运行的作业。如果是你的工作是如此昂贵,你的管理员可能不会与周围关闭的cron工作和缓慢的服务器再次工作,无论如何,可能会采取进一步的行动,以防止你的工作。
xv8emn3q3#
Linux有几个Cron替代品。比如
06odsfpq4#
只是对答案的补充。很少见的情况。如果您的应用程序具有频繁的数据库操作量,那么您可以维护一个单独的表,其中的一列将作为运行脚本时的度量。示例如下表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脚本。
9w11ddsr5#
最佳解决方案:-使用序列化文件保存状态或数据库。在每次请求时检查此文件,并在需要时运行脚本。如果您需要更广泛地管理这些作业并运行shell命令,并且您具有安装服务的权限。使用SartajPHP NativeApp作为服务。您还可以通过浏览器控制您的作业,查看实时错误并修复它们。
5条答案
按热度按时间zpjtge221#
尽管这个问题是前一段时间发布的,但我也遇到了同样的问题,但找到了解决方案(基于Kissaki's answer,谢谢!),并认为我会张贴在这里的任何人仍然在寻找一个可能的解决方案。
前提条件:
代码(python):
ct2axkht2#
这取决于你对黑盒的访问权限。
PHP本身将无法很好地独立运行。你可以做一个脚本,试图不断增加它的执行时间,睡眠和定期检查新的作业。但这是次优的,因为您必须通过浏览器访问它一次,并且脚本必须确保它只运行一次。
通过shell访问,你可以在shell上运行php脚本,这将防止它从公共调用,并必须通过web浏览器运行它。
通过shell访问,您还可以运行一个为您提供(cron)服务的程序。无论是Java、Python还是其他程序。
Cron作业不应该总是拖慢服务器。这取决于运行的作业。如果是你的工作是如此昂贵,你的管理员可能不会与周围关闭的cron工作和缓慢的服务器再次工作,无论如何,可能会采取进一步的行动,以防止你的工作。
xv8emn3q3#
Linux有几个Cron替代品。比如
1.赫克伦
有关将来的阅读,请参阅this article。
06odsfpq4#
只是对答案的补充。很少见的情况。
如果您的应用程序具有频繁的数据库操作量,那么您可以维护一个单独的表,其中的一列将作为运行脚本时的度量。示例如下
表CRON_RUN
现在,在您的应用程序中,每次发生这些频繁的数据库操作时都可以执行检查,并检查last_run日期和当前日期是否存在x差异。X是您要运行脚本的时间差。2分钟在你的情况下同样,如果差值大于或等于2分钟,则update语句将运行以使用当前日期时间更新last_run列,下一个语句将是您的cron.php脚本。
9w11ddsr5#
最佳解决方案:-使用序列化文件保存状态或数据库。在每次请求时检查此文件,并在需要时运行脚本。如果您需要更广泛地管理这些作业并运行shell命令,并且您具有安装服务的权限。使用SartajPHP NativeApp作为服务。您还可以通过浏览器控制您的作业,查看实时错误并修复它们。