php - Linux:将日志文件从安装的目录递归移动到本地目录,同时维护本地目录中的目录结构

标签 php linux ubuntu-12.04

所以我已经做了相当多的谷歌搜索,但我还没有找到这个问题的答案。我有一台服务器需要实时运行并快速响应 - 我不希望我的访客/客户等待。然而,我已经遇到了足够多的服务器问题,知道我需要一个良好的备份,而不是现在的备份。

当我在这台服务器上尝试 mysqldump 和 tar 时,它可以工作,但会使服务器在几个小时内变得非常慢。它还可能导致硬盘驱动器被填满(如果我忘记删除旧备份太久),从而导致 MySQL 和我的网站瘫痪。减慢服务器速度是 Not Acceptable ,因此迄今为止我的备份仅在最常见的缓慢日期/时间每周进行一次。但是,我不喜欢这个解决方案。

所以我现在有另一台服务器,我已将其设置为我的主服务器的近实时备份。我正在设置 MySQL 复制和每日 rsync。然后,可以从此备份服务器运行每日 mysqldump 和 tar,而不会影响主服务器上的响应时间。很好,但我想更进一步。

我有许多全天捕获的数据文件 - 例如日志文件和基本访问者跟踪文件(IP、引荐来源网址、用户代理,没什么不好的) - 不需要实时处理,我决定最好让这个备份服务器处理这些文件,而不是占用我的主服务器的资源。但这给我带来了一个问题。我想将这些文件从主服务器上转移到我的备份服务器上进行处理。这些文件分散在许多目录中,并且该目录列表只会随着时间的推移而增长。所以我想避免现在在多个目录上运行 mv 并必须维护该列表 - 一些新目录最终会被忘记。

因此,我已将主服务器上的必要目录安装在备份服务器上的/media 文件夹下。如果我只是想复制文件,我会使用 scp 但我想移动它们。所以我想要一个执行以下操作的命令:

mv /media/primary/*.log /backup/.

其中 mv 命令递归地查找/media/primary 文件夹,并深入目录到每个子文件夹,查找任何带有 .log 扩展名的文件。然后将该文件从/media/primary/移动到/backup 上的等效文件夹。因此,例如,如果我在目录/media/primary/tool1/logs 和/media/primary/tool2/logs 中有日志文件,我希望它们分别移动到/backup/tool1/logs 和/backup/tool2/logs 。我希望(但不要求)该命令创建该文件夹(如果该文件夹丢失)。一旦正确移动,就可以在备份服务器上的本地硬盘驱动器上处理和重命名/删除文件。

我的两台机器都使用 Ubuntu 12.04 服务器。我主要使用 PHP 工作,因此我一直在为备份服务器创建一个每天执行的 PHP 脚本。该脚本可以通过 SSH (phpseclib) 执行系统命令。

CLI 的单个命令会很棒,但我知道这可能是不可能的。

谢谢

最佳答案

像这样的东西怎么样

rsync -azrR --include='*.log' -f 'hide,! */' /media/primary /backup

如果您使用 man rsync 并输入 2343g,它应该会将您带到解释此过滤器的行。基本上,它会在模式匹配中隐藏除目录之外的所有内容(每个文件);但是,由于我也使用了 --include='*.log' 标志,它将覆盖该标志,并且该模式将仅匹配 .log 文件。您还可以使用 -nv 标志进行试运行,看看会发生什么。

关于php - Linux:将日志文件从安装的目录递归移动到本地目录,同时维护本地目录中的目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18432488/

相关文章:

php - mysqli_multi_query何时停止执行?

php - 如何在不使用 javascript 的情况下删除记录之前显示是或否?

linux - 从机上没有启动 Hadoop 组件

ruby-on-rails - 有没有办法从 AIFF 文件中删除 IDV 标签?

amazon-web-services - 出现错误 "Required option ' -K, --private-key KEY'丢失(-h 用于使用)”

linux - CakePHP:为什么文件所有者和组不断更改为root?

php - 从 php 文件在 js 文件中定义变量

php - Doctrine2 QueryBuilder NOT IN 语句不起作用

linux - cpu_to_le64 有什么作用?

linux - Yocto 上的 gcc-arm-linux-gnueabihf