持久存储单个计数器的最佳方法是什么?

持久存储单个计数器的最佳方法是什么?

我有一个简单的 bash 脚本,每秒递增计数器几次,保证每秒少于 100 次。该脚本工作正常,但我希望计数器在机器崩溃时持续存在。

在纯 SSD 系统上保留计数器的最佳方法是什么?每次更新时我是否应该将其回显到/var/<app>/某个地方(即存储在文件中)?如果是这样,是/var/<app>/正确的地方吗?我是否需要安装完整的数据库来跟踪这个单一值?有没有一些可爱的 Linux 小功能可以有效地做到这一点?

为了澄清,我的问题不是确保计数器在脚本的单独运行之间保持不变,我已经解决了这个问题。我担心的是,万一系统因机器崩溃而意外突然失败(因此我不能依赖trapshell 脚本)。

答案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 根据进程接收到的信号运行命令。

相关内容