php - 大量用户的 Cron 作业管理

标签 php linux cron cron-task

我有类似 backupify 的服务.从不同的社交媒体平台下载数据,目前我有大约 2500 个活跃用户,每个用户运行一个脚本,从 facebook 获取数据并将它们存储在 Amazon S3 上,我的服务器是 AWS 上的 Ec2 实例。

我在表中有 900 个 facebook 用户条目,有一个 PHP 脚本运行并从数据库表中获取用户,然后从 facebook 备份数据,然后从 facebook 中选择下一个用户。

当我有不到 1000 个用户时一切都很好,但现在我有超过 2500 个用户问题是 PHP 脚本停止,或运行前 100 个用户然后停止,超时等。我正在运行 PHP 脚本来回 php -q myscript.php 命令。

另一个问题是单个用户脚本需要大约 65 秒才能从数据库表到达最后一个用户可能需要几天时间,所以在数据库表等上并行运行的最佳方式是什么。

请建议我为大量用户备份大量数据的最佳方法是什么,我应该能够监控 cron,就像一个 mangaer。

最佳答案

如果我没弄错的话,你有一个针对所有用户的单一 cron 任务,以某种频率运行,试图一次性处理每个用户的数据。

  1. 您是否尝试发出 set_time_limit(0);在代码的开头?
  2. 此外,如果任务需要大量资源,您是否考虑过为每个 N 个用户创建一个单独的 cron 任务(基本上模仿多线程行为;从而利用服务器的多个 CPU 内核)?
  3. 正在将您的数据写入某种 cache而不是数据库,并有一个单独的任务将缓存内容提交到对您可行的数据库?
  4. 您是否有机会使用内存中的数据表(这非常快)?您需要不时将数据库内容保存到磁盘,但以这个价格,您可以获得快速的数据库访问。
  5. 您能否将任务外包给独立的服务器作为分布式服务,并编写 cron 脚本作为它们的负载平衡器?
  6. 优化您的代码也可能有所帮助。例如(如果您还没有这样做)您可以缓冲收集的数据并在脚本末尾在单个事务中提交,这样执行流就不会被数据库重复出现的 I/O 阻塞分散。

关于php - 大量用户的 Cron 作业管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475019/

相关文章:

java - 如何在使用 ini4j 阅读的 Java 中编辑和添加时正确使用 ini 文件?

python - 使用 apscheduler 为 Django 项目在 Procfile (Heroku) 中定义 Cron 作业的问题

php - 将随机行从一个 MySQL 表复制到另一个具有不同模式的 MySQL 表

linux - 进程的 PSS(Proportional Set Size)数字是否包括内核代码消耗的内存?

php - 为什么 Joomla 或 #__session 表会删除我的 "session expired"条目而不刷新 html 页面?

php - 获取 HTTP 错误 500.0

javascript - 为什么Jquery ajax要给String添加斜杠?

linux - base64 包不可用。有没有替代品,以便我仍然可以使用该命令?

python - Virtualenv 不会改变 Cronjob 中的 PYTHONPATH

php - 在类中调用静态方法