我拥有的是一个c程序和一个shell脚本。 c程序实现inotify库。该程序监视目录并将新生成的文件写入目录到一个文件。然后,shell脚本将这些文件rsyncs到一个远程目录,将c程序生成的文件作为输入。我怎样才能在c程序和shell脚本之间进行sysnchronise ...?shellscript和c程序之间的同步
回答
比方说,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`
如果日志观察程序以附加模式打开'LIST.txt',或者每次需要添加文件时打开'LIST.txt',那么这是一个很好的工作机会。如果日志观察者不以附加模式打开文件,那么它将在文件的前1个KiB中写入前20个条目。然后你显示的脚本将复制文件和rsync OK。日志观察者下次写入时,它将以偏移量1 KiB写入。下次脚本运行时,它将看到一个空字节为1 KiB的文件,后面是新名称。冲洗并重复。如果'rsync'不喜欢带有空值的文件,则会出现问题。 –
将'评论中的评论'转换为答案。评论现在被删除。
您确定Oracle(SAP)不提供允许您在完成日志文件存档时使用的机制吗?如果是这样,那么使用它们可能是明智的;他们可能会更可靠。
如果您正在处理来自DBMS的日志文件,那么如果日志文件无法一次保持数分钟,那么很可能会认为数据库管理系统配置错误,因此到达率很可能会降低每隔几分钟就会有一个相对稳定的“一个文件”,而不是每秒钟狂热的“数百个文件”。这很好。因此,您应该考虑修改C程序是否合理(我将其称为logwatcher
),以便当它检测到新文件到达时,它会运行一个可配置脚本,该脚本传递的是新到文件。这个脚本可以做任何需要的同步/复制,相信没有竞争条件可以处理。这可能是最简单的:
logwatcher -d "$TARGETDIR" -p '*.log' -e "$BACKUPSCRIPT"
-d "$TARGETDIR"
指定要监视的目录; -p '*.log'
指定日志文件名称的模式; -e "$BACKUPSCRIPT"
是要运行的脚本。
当检测到新文件时,logwatcher
以相关(绝对)文件名运行$BACKUPSCRIPT
。这应该很容易管理,并且足够灵活以满足大多数需求。该$BACKUPSCRIPT
可以rsync
该文件到另一台机器或其他任何你需要它做的事情。如果需要,您可以提供环境变量和配置文件。
- 1. C#程序Windows和Linux之间的时间同步
- 2. C#和C++之间的同步值?
- 3. 同步Mac服务器和C#程序之间的文件?
- 4. 在C#和iphone应用程序之间同步数据
- 5. PC应用程序和Android应用程序之间的同步
- 6. CreateFileMapping程序之间的同步?
- 7. 在同一个应用程序中的C++和c#之间的异步通信
- 8. 在Java和C++之间同步日期
- 9. hsqldb - 应用程序之间不同步
- 10. 移动应用程序和云之间的数据同步
- 11. 同步主程序和QProcess之间的输出?
- 12. PC和Android之间的数据同步应用程序?
- 13. 本地网络和Android应用程序之间的同步
- 14. 同步iPhone和iPad之间的核心数据应用程序
- 15. c#应用程序(.NET)和微软服务器之间的文件同步
- 16. 同步客户端和服务器程序之间的时钟在c
- 17. 通过Jacob的Java应用程序和Microsoft应用程序之间的同步
- 18. C#和C++之间的异步管道
- 19. 在服务器和iOS应用程序之间同步数据
- 20. 在iOS和Android之间同步应用程序数据
- 21. Android应用程序,Web和桌面应用程序之间的同步数据
- 22. 在iOS应用程序和Mac之间同步信息的应用程序
- 23. iPhone应用程序和Web应用程序之间的双向同步
- 24. C++和c之间的共享内存同步#
- 25. 在同一程序的多个实例之间同步
- 26. 如何同步我的应用程序和服务器之间的时间?
- 27. C和JAVA程序之间的区别
- 28. shell和C程序之间的关系
- 29. 使用tbb线程之间的同步
- 30. 线程之间的回调同步
欢迎来到Stack Overflow。请阅读[常见问题]。你写了C程序吗?或者你有源码吗?如果你需要,你可以做出修改吗? C程序如何写入其日志文件?你能告诉它要写入哪个文件吗?当你写了100个文件(1个文件,10个文件,...)时,你可以在已知的文件名之间进行切换吗?它有多忙?每秒会有几十或几百个文件,还是每五分钟一个?这些因素会影响你最擅长的事情。 –
亲爱的乔纳森感谢您的及时回复。 c程序不是由我编写的,但它的源代码是可用的,因此完全可以修改。所以你所有的查询都是可能的。目前我正在尝试监视运行SAP的办公室服务器中的oracle数据库的归档日志目录。日志生成不一样。 – varun
为什么不把它全写在C中,或全部写在'bash'中?你可以从C中调用'rsync',或者从'bash'调用'inotifywatch'(和其他)。 – cdarke