有没有办法在没有 cron 的托管 Web 服务器上自动运行 PHP 脚本?

Posted

技术标签:

【中文标题】有没有办法在没有 cron 的托管 Web 服务器上自动运行 PHP 脚本?【英文标题】:Is there any way to automatically run PHP script on Hosting web server withour cron? 【发布时间】:2010-12-20 16:35:26 【问题描述】:

我有一个每天发送短信提醒的脚本。我希望它通过从数据库中获取消息来自动发送短信。我可以在没有 cron 的情况下做到这一点吗?有没有其他解决办法。请帮忙

【问题讨论】:

您需要另一个作业调度程序。 cron 怎么了? 如果您使用的是 linux 服务器,您有什么理由不想使用 cron 吗? 任何名副其实的程序员都不会介意有机会学习一些新知识。 “因为我不知道怎么做”不是一个有效的借口,这表明你根本不是程序员材料。 杜罗斯,你说得对,但也有点苛刻。 Rajasekar,教育是灵丹妙药,一个人必须学会成长。 如果您不想使用 cron,因为您不知道如何使用它……您如何期望知道如何使用您不知道存在的工具? 【参考方案1】:

使用第三方 webcron,例如 easycron.com。

【讨论】:

【参考方案2】:

简单来说,如果不使用某种调度程序或 cron,您将无法运行 php 脚本...

【讨论】:

【参考方案3】:

您可以包含您的脚本,并在每次有人访问您的主页/登录页面等时运行它... 在mysql中建立一个名为time的表。 每次访问页面时查询数据库。 if (time argument) 在后台运行脚本,更新数据库中的新时间

您所要做的就是弄清楚您希望多久发送一次短信电子邮件。 前任。 每天1次 数据库行“时间”中有一个日期。日期可以说是 24 小时前。 如果数据库行“时间”小于或等于今天减去一天 1 天,则运行您的脚本。这将每天运行一次您的脚本。

缺点 -> 有人需要每天至少访问一次您的网站。

您的网站网址是什么?你在做什么?

【讨论】:

【参考方案4】:

您可以使用webcron 服务来触发您的脚本。

【讨论】:

【参考方案5】:

这不是最佳答案,因为它仍然需要 cron 某处,但您始终可以设置另一台具有 cron 功能的机器(例如您的家用计算机)来访问您网站上的页面触发动作(使用像curlwget这样的库)。

【讨论】:

【参考方案6】:

我使用 Windows 任务计划程序在以前无法访问 cron 的服务器上安排脚本,效果很好。

【讨论】:

【参考方案7】:

有一个外部 AppEngine cron 工作调度员:使用谷歌AppEngine,它是免费。然后,外部“任务”可以“回调”您的 PHP 脚本。

我看不出在你的机器上使用本地 cron 有什么问题,尽管除了它被阻止让你访问。

【讨论】:

【参考方案8】:

这不是最优的,但在不使用任何调度程序的情况下,您可以这样做。

    为每个页面设置一个头文件。 在头文件中放置您想要运行的函数/过程。 创建一个 if 语句来检查时间是否大于或等于您需要运行您的过程的时间并且它尚未运行。

这方面的缺点是:

    没有保证服务时间。 如果您的网站没有获得点击,那么它可能会完全错过窗口。 您向您的页面添加了至少 3 个函数调用,更不用说检查此过程今天是否完成所需的函数调用,这可能包括对 MySQL 服务器或平面文件的调用...

【讨论】:

【参考方案9】:

你有几个选择:

模拟 cron 行为:在您的 php 代码中,检查页面是否在或接近您希望安排发送的时间加载,如果消息尚未发送,则加载发送的脚本后台的消息并将它们标记为已发送。

正如其他人建议的那样,在其他地方设置一个 cronjob,通过 http 获取 url(例如使用 wget)在您的服务器上执行脚本

【讨论】:

【参考方案10】:

如果您无法在服务器上设置 cron 作业,请在您有权访问的客户端(例如您的计算机)上执行此操作,以便在您需要运行脚本时发出请求。

【讨论】:

【参考方案11】:

在别处设置一个 cron 任务,让它请求发送警报的脚本。

【讨论】:

以上是关于有没有办法在没有 cron 的托管 Web 服务器上自动运行 PHP 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails/Apache 中自动托管用户域

有没有办法使用cron重新启动pm2进程但是只有它还没有运行?

有没有办法用 Cron Job 加载页面?

有没有办法使用 Ngrok 将 Azure 机器人服务连接到本地托管的机器人?

有没有办法在不使用Azure Service Bus的情况下调试SharePoint在线远程事件接收器即提供者托管的应用程序?

有没有办法从谷歌云 sql 中使用 pg_cron?