假设我有一个文件urls.txt,其中包含我正在监控的URL列表。我的监控脚本偶尔会编辑该文件,例如,指示每个URL是否可访问。我还想手动编辑该文件,添加或更改URL列表。我怎样才能允许这样我手动编辑时不必考虑它?
以下是一些可能的答案。你会做什么?
参与hackery就像让程序检查vim或emacs创建的锁定文件一样。因为这只适合我,所以这实际上可行。
如果人类编辑始终优先,那么只需要让人类破坏程序的更改(例如,忽略编辑器警告文件已在磁盘上更改)。然后程序可以在下一个循环中重做它的更改。不过,在用户编辑文件时更改文件并不是那么好。
永远不要让人触摸程序正在进行修改的文件。重新思考设计,只有一个文件只有人工编辑,另一个文件只有程序编辑。
为人类提供一个自定义工具来编辑执行相应文件锁定的文件。这可能就像锁定文件然后启动编辑器或自定义界面(可能是一个简单的命令行界面)来插入/更改/删除文件中的条目一样粗糙。
使用数据库而不是平面文件,然后锁定全部自动处理。
(请注意,我编写了URL监控示例,以使其更具体,因为我实际想到的可能是太奇怪和分散注意力 - 这个问题严格来说是关于如何让人类和程序都修改相同的状态文件。)
答案 0 :(得分:6)
我会使用数据库,因为基本上你需要构建它来实现你想要的东西。为什么重新发明轮子?
如果完整的DBMS负载太大,请将文件分成两部分并定期同步。 URL是否可访问听起来不像用户将要更改的内容,因此不应由他们编辑。
在同步过程中(虽然它可能是监视器的子功能,但必须锁定监视器和用户),删除监视文件中不在用户满的条目。另外,将已添加到用户文件中的文件添加到监视文件中(并开始监视它们)。
但是,我会为用户使用特殊的前端数据库方法,因为现在你可以获得相对较好的轻量级数据库。
答案 1 :(得分:2)
使用合理的版本控制系统!
(Git在这里运作良好)。
也就是说,问题的本质意味着真正的数据库是最好的 - 它们通常具有数据库级,表级或行级锁定 - 但随后将您需要的任何脚本放入版本控制中
答案 2 :(得分:1)
我会选择选项3.实际上,我会让程序读取人工编辑的输入文件,并将每个查询的结果附加到日志文件中。通过这种方式,您还可以分析网站随时间的可达性。您还可以让程序维护一个文件,该文件指示输入文件中每个站点的当前可达性状态,作为当前状态的快照。
答案 3 :(得分:0)
另一个选项是使用两个文件,一个用于自动访问,另一个用于手动。您需要在用户文件中指明修改或删除的方法,但在其他一些解决方案中也存在类似的问题。