【发布时间】:2009-05-14 19:57:58
【问题描述】:
我有一个通过 http 读取一个文件的 php 脚本(该文件位于其他域中)。我想每天只阅读一次或两次此文件,而不是每次刷新网站时都连接到它。 除了使用 cron 之外,还有其他方法吗? 我不想使用 cron,因为我更喜欢在脚本本身中设置这种行为。所以它很灵活,所以我可以在任何地方使用它,而无需每次都设置 cron。 谢谢
【问题讨论】:
我有一个通过 http 读取一个文件的 php 脚本(该文件位于其他域中)。我想每天只阅读一次或两次此文件,而不是每次刷新网站时都连接到它。 除了使用 cron 之外,还有其他方法吗? 我不想使用 cron,因为我更喜欢在脚本本身中设置这种行为。所以它很灵活,所以我可以在任何地方使用它,而无需每次都设置 cron。 谢谢
【问题讨论】:
我过去在无法访问 cron 时做过这种事情:
$lastRunLog = '/path/to/lastrun.log';
if (file_exists($lastRunLog)) {
$lastRun = file_get_contents($lastRunLog);
if (time() - $lastRun >= 86400) {
//its been more than a day so run our external file
$cron = file_get_contents('http://example.com/external/file.php');
//update lastrun.log with current time
file_put_contents($lastRunLog, time());
}
}
【讨论】:
cron 出了什么问题?
你有几个使用 cron 的选择——你的 php 可以由命令行 PHP 解释器调用,或者你可以使用 wget 或 fetch 或等效的方法在服务器上调用你的 PHP。
一般来说,在 web 服务器的上下文中运行的 PHP 对它可以执行的时间有时间限制,所以通常你不能设置“后台”PHP 线程来“稍后”做一些事情。
【讨论】:
如果您在 *nix 环境中,您可以使用 cron jobs
【讨论】:
如果您不能或不想使用 cron,则可以仅在访问页面时更新它。您可以缓存 HTTP 请求的结果,并且仅在缓存超过一天或您选择的任何时间间隔时才在加载它的页面上更新它。
【讨论】:
如果您想按时间间隔访问网站,也可以使用Web Based Cron。
【讨论】:
您甚至可以使用数据库表 - 结构、id、日期、脚本 url 以及您需要的任何内容都非常简单 - 并在每次运行脚本时添加一行。
然后,在运行脚本之前,只需检查您拥有的每一天的行数。
【讨论】:
您可以使用Cronjob。然后就可以通过命令行运行php脚本了。
php /someplace/somefile.php
如果您每天更新,Cronjob 将如下所示。
0 0 * 0 0 php /someplace/somefile.php
【讨论】:
由于您明确声明您不想使用 cron,唯一的其他方法(没有类似于 cron 的东西)是将您的脚本设置为守护程序。但是,除非您真的需要守护程序提供的灵活性,否则 cron 会更容易和更简单。
【讨论】:
如果您使用的是带有 systemd 的 Linux 发行版:
我需要安排基于年度的作业,独立于应用程序(以防系统重新启动或类似情况),并且有人建议我使用 systemd Timers。上面的 Arch Wiki Page 给出了一些例子。
【讨论】: