我所拥有的是一个c程序和一个shell脚本。 c程序实现inotify库。程序监视目录并将目录中新生成的文件写入文件。然后shell脚本将这些文件rsyncs到远程目录,将c程序生成的文件作为输入。我如何在c程序和shell脚本之间进行sysnchronise ...?
答案 0 :(得分:1)
假设C程序将目录中新生成的文件写入名为“LIST.txt”的文件中。
mv LIST.txt LIST_TO_SYNC.txt && :> LIST.txt
rsync --include-from=LIST_TO_SYNC.txt #add your real parameters
mv LIST_TO_SYNC.txt LIST.txt.`date +%Y%m%d_%H%M%S`
答案 1 :(得分:0)
将“评论中的论文”转换为答案。评论现已删除。
您确定Oracle(SAP)不提供允许您在日志文件完成时归档的机制吗?如果是这样,建议使用它们;他们可能更可靠。
如果您正在处理来自DBMS的日志文件,如果日志文件无法一次持续几分钟,您可能会认为DBMS配置错误,因此到达率很可能是一个相对稳重的“每隔几分钟一个文件”,而不是一个狂热的“每秒数百个文件”。这很好。
鉴于此,您应该考虑修改C程序是否有意义(我将其称为logwatcher
),以便在检测到新文件到达时,它会运行一个可配置的脚本,该脚本通过新到文件的名称。然后,此脚本可以执行任何需要的同步/复制,确信不会有竞争条件需要处理。这可能是最简单的:
logwatcher -d "$TARGETDIR" -p '*.log' -e "$BACKUPSCRIPT"
-d "$TARGETDIR"
指定要观看的目录; -p '*.log'
指定日志文件名的模式; -e "$BACKUPSCRIPT"
是要运行的脚本。
当检测到新文件时,logwatcher
运行$BACKUPSCRIPT
并带有相关(绝对)文件名。这应该很容易管理,并且足够灵活以满足大多数需求。 $BACKUPSCRIPT
可以rsync
将文件发送到其他计算机或您需要它执行的任何其他操作。如果需要,您可以提供环境变量和配置文件。