我有一个简单的 bash 脚本,每秒递增计数器几次,保证每秒少于 100 次。该脚本工作正常,但我希望计数器在机器崩溃时持续存在。
在纯 SSD 系统上保留计数器的最佳方法是什么?每次更新时我是否应该将其回显到/var/<app>/
某个地方(即存储在文件中)?如果是这样,是/var/<app>/
正确的地方吗?我是否需要安装完整的数据库来跟踪这个单一值?有没有一些可爱的 Linux 小功能可以有效地做到这一点?
为了澄清,我的问题不是确保计数器在脚本的单独运行之间保持不变,我已经解决了这个问题。我担心的是,万一系统因机器崩溃而意外突然失败(因此我不能依赖trap
shell 脚本)。
答案1
您是否考虑过将值简单地存储在文件中?为此,文件可以代替数据库。然而,我担心每秒读取文件 100 次以及脚本的竞争条件。但您可以使用以下内容:
运行 1:
var=2
echo $var > foo.txt
运行2:
var=$(head -n 1 foo.txt)
echo $var # 2
您还可以用来sed
进行更复杂的处理。此外,如果您的脚本是连续的,您可以简单地使用附加到文件>>
并读取每次运行的最后一行(使用tail
)来对抗锁定。但我相信更好的设计可能是在 for 循环中运行脚本,而不是调用脚本 100 次(如果可能的话)。
答案2
我建议将其存储在变量中,并在特定情况下将其写入文件(例如 EXIT、TERM)。您可以trap
根据进程接收到的信号来运行命令。
示例位于陷阱命令
答案3
最好的方法是在特定场合(例如 on )将计数器的最后值存储在文件中EXIT
。这比尝试使用内置选项更简单,然后您可以在脚本中包含文件的路径,获取值并在脚本重新启动时恢复。
您可以使用 trap 根据进程接收到的信号运行命令。