【问题标题】:Keeping a script running server side at all times [closed]始终保持脚本在服务器端运行[关闭]
【发布时间】:2014-09-24 02:01:41
【问题描述】:

我创建了一个网站:http://instapromobiz.com,它通过 Instagrams api 主要使用 javascript 和一点 php 自动完成 Instagram 喜欢/关注/取消关注。

我的问题是它显然只在用户打开页面时运行。这可能是一个广泛的问题,但是在没有用户打开页面的情况下运行这个脚本(这是一个无限循环,直到用户停止它)的最佳方式是什么。基本上他们登录,添加标签并按开始,然后他们可以离开,然后稍后回来并停止脚本。

我有常规的虚拟主机,没有 SSI 或 VPS,所以不能使用 node.js。

【问题讨论】:

  • “常规网络托管”如果这意味着共享主机,他们不太可能让您这样做
  • 您将不得不编写一个在服务器上运行的守护进程,或者设置一个定期调用程序/脚本的作业调度程序(如 Cron)。如果您使用“常规网络托管”,那么您很可能也无法做到。

标签: javascript php instagram serverside-javascript server-side-scripting


【解决方案1】:

重新构建脚本以终止,然后使用 cron 每分钟或每 15 分钟运行一次。许多网络托管计划将支持这种类型的配置。

更多关于 Cron 的信息:https://help.ubuntu.com/community/CronHowto

【讨论】:

  • 这似乎是个好主意,但是每个脚本对每个用户都是唯一的,用户名、标签、喜欢、关注都存储在数据库中。我必须为每个用户创建一个 cron 吗?我正在使用 godaddy,他们有一个很好的 gui 来创建 crons。
  • 脚本中没有循环遍历用户,请注意 GoDaddy 是有史以来最糟糕的主机之一。
  • 无需为每个用户创建单独的 cronjob。一般的想法是编写一个循环遍历每个用户的脚本,执行您希望它执行的任何操作并标记每组更改已完成,以便下次运行时它只需要执行新项目。如果你有更多的细节,我会给你更多的指导。
【解决方案2】:

您可以在 PHP 版本 4 和 5 中完成此操作。

步骤 1. 取消时间限制

使用set_time_limit 函数,并调用它:

set_time_limit(0);


第 2 步。忽略中止

PHP 有一个名为ignore_user_abort 的友好函数。像这样使用它:

ignore_user_abort(true);

现在,脚本可以永远运行了!

【讨论】:

  • 单独这样做是让服务器崩溃的好方法
  • 开发人员应该能够处理这个问题:他们可以确保进程仅在适当的时候运行,并且仅在进程尚未运行时运行。该解决方案完全符合 OP 的要求。
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2017-05-29
  • 2018-05-11
  • 1970-01-01
  • 2022-01-26
  • 2012-03-14
相关资源
最近更新 更多