【发布时间】:2016-06-04 11:57:59
【问题描述】:
我有一个 PHP 脚本,需要在每个工作日的特定时间运行。 cron 或 Windows 任务调度程序是执行此操作的唯一方法吗?
有没有办法在另一个 PHP 脚本中进行设置?
【问题讨论】:
-
这正是 cron 的用途,因此使用它很有意义。
我有一个 PHP 脚本,需要在每个工作日的特定时间运行。 cron 或 Windows 任务调度程序是执行此操作的唯一方法吗?
有没有办法在另一个 PHP 脚本中进行设置?
【问题讨论】:
取决于时间的精确程度。我见过使用的一种技术(被称为“穷人的 cron”)是让一个经常访问的脚本(例如,一个站点的主页)在一段时间后在第一个页面加载时触发一个任务(在数据库)。
但是,如果您需要任何形式的准确性保证,cron 或 Windows 计划任务确实是最佳选择。如果您的主机不支持它们,那么是时候换一个更好的了。
【讨论】:
除了cron 或Scheduled Tasks,您可以让您的PHP 脚本始终运行它。该进程应该休眠(在一个循环内),直到时间到达。然后,该过程可以执行剩余的功能/方法。或者,您可以设置另一个脚本(它将充当守护进程)来检查时间并执行另一个脚本。
【讨论】:
好吧,既然网络是一种拉动机制,你必须有某种动作来触发 PHP 脚本执行。 cron 是 *nix 和 Windows 上的任务调度程序的一个选项。您也可以编写自己的具有计时器的服务,但仅在需要时,这在用于更新程序、作业等的 Windows 服务中很常见。
您可以这样做的一种方法是在 cron 任务中为所需的每个操作调用一个 php 脚本。或者一个执行其他任务的 php 脚本。基于 Web 的任务(例如 PHP)的问题是超时。确保您的任务在 60-90 秒以内。如果没有,您可能会考虑使用 python、perl 或 ruby 甚至 bash 脚本来完成这项工作,而不是 PHP 脚本。
cron 似乎是您的最佳选择。您将不得不使用 wget 调用您的脚本。这里有例子:http://www.thesitewizard.com/general/set-cron-job.shtml
例如,这会在每天 11 点运行脚本:
30 11 * * * /usr/bin/wget http://www.example.com/cron.php
【讨论】:
当然,Cron 是迄今为止在 *nix 上安排任何事情的最佳方式。
【讨论】:
如果这是在您没有 cron 访问权限的远程服务器中,您可以在您的计算机上设置 cron/windows 调度程序,以打开 Web 浏览器到包含您希望运行的脚本的页面
【讨论】:
您可能想要使用 cron(或 windows 计划任务)。
如果你真的想要,你可以设置另一个 php 脚本以无限循环连续运行(在循环中使用 sleep 命令,比如 30 秒左右),然后当你到达你想要的日期/时间时执行通过 shell 命令调用的其他脚本。虽然可能,但我想不出使用这种方法而不是 cron/计划任务的一个好理由
【讨论】:
您可以编写一个长时间运行的脚本,在预定义的时间运行您的主脚本,但这非常不必要,容易出错,而且它基本上是“用 phph 重写 cron”。
使用真正的 cron 本身会更容易,也是更强大的解决方案。如果要打包应用程序,可以在 /etc/cron.d 中放置一个文件,其中包含运行应用程序的单个 cron 行。
【讨论】:
您需要在 Windows 下使用 cron 作业(在 Linux/Unix 下)或计划任务。您可以让另一个脚本连续运行,它会检查时间并以指定的时间间隔执行脚本,但使用操作系统提供的机制更容易管理并且可以适应重启等。 p>
【讨论】:
Uniform Server 项目在无法接受 cron 的环境中对 mimicking cron 有一些很好的建议。不过,如果 cron 完全可以选择,请使用它。
【讨论】: