![使用 Rsync 获取最新文件。还有 cron 作业?](https://linux22.com/image/1337126/%E4%BD%BF%E7%94%A8%20Rsync%20%E8%8E%B7%E5%8F%96%E6%9C%80%E6%96%B0%E6%96%87%E4%BB%B6%E3%80%82%E8%BF%98%E6%9C%89%20cron%20%E4%BD%9C%E4%B8%9A%EF%BC%9F.png)
我在两台不同的服务器上有一个日志文件。这些服务器位于负载平衡器下,因此一半的流量流向一台服务器,另一半的流量流向另一台服务器。
我需要从一台机器上获取最新的日志文件,并将该日志文件传输到另一台机器。因此,如果一台服务器上的日志文件发生更改,则另一台服务器上的日志文件也会更新。
我认为我需要使用 rsync。我是否还需要将其放入 cron 作业中?
答案1
rsync 无法将两个日志文件的内容合并为一个。
只要您将远程日志 rsync 到与包含本地日志的目录不同的目录,您将能够创建同步副本,以便一台计算机保存所有日志数据(尽管分为两个文件)。
正如评论中所建议的,为了持续合并日志文件,请配置服务器软件以通过该syslog
设施记录到中央系统日志服务器。
答案2
您可以使用-u
aka--update
选项来 rsync 并自动启动它crontab
。从rsync 手册页:
-u, --update skip files that are newer on the receiver
还请注意可能满足其他需求的其他选项:
--inplace update destination files in-place
--append append data onto shorter files
--append-verify --append w/old data in file checksum
至于使用 cron 作业,请查看crontab
。您为 crontab 提供一个文件,它会读取该文件以了解何时启动任务。该文件的格式为:
minute hour day_of_month month day_of_week COMMAND
您可以使用如下文件每 7 分钟执行一次作业:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command
*/7 * * * * mail -s 'cron working' [email protected]
假设您将 crontab 文件命名为~/crontab.bash
,则可以在特定机器上安装 crontab 作业,例如:
crontab ~/crontab.bash