存储 bash 脚本生成的半短期数据的最佳位置是什么?

存储 bash 脚本生成的半短期数据的最佳位置是什么?

更新

想出了一个更好的解决方案:基本目录/var/tmp

因为想一想: https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

| /var/tmp | Temporary files to be preserved between reboots. |

这个地方实际上就像 /tmp 一样,只不过它致敬了使数据集不适合 /tmp 的唯一条件:它必须在重新启动后继续存在。

从所有可能的角度来看,将所述数据集放入 /var/tmp 只有优点:

• 非常符合地点描述。

• bash 脚本X 可以检查此位置并在此位置创建子目录,而无需sudo 或偏离建议不要在该位置为自己的bash 脚本创建子目录的约定,这些脚本不随发行版一起提供。

mkdir /var/tmp/bash_script_x_logs

• bash 脚本 x 可以在那里保存日志 - 对于每天第一次处理的每个文件 - 无需提升权限、sudo 或 root

ls /var/tmp/bash_script_x_logs

bash_script_A
bash_script_B
bash_script_Y
bash_script_Z

• 每个人都可以访问这个地方,它是可共享的,从而可以在处理后的 bash 脚本 Y 上进行协作工作。

例如,假设有用户 A、B 和 C,位于一台主机上或分布在多台主机上。

现在是上午 8 点,用户 C 是第一个处理 bash 脚本 Y 的人,正在通过 bash 脚本 X 分析它的情况。

Bash 脚本 X 将第一次运行分析 bash 脚本 Y 的数据集保存到/var/tmp/bash_script_x_logs.

用户处理文件直到上午 11 点,从而提高效率,让它完成工作,并且上午 11 点所需的行数比上午 8 点开始时少 15%。

晚上 10 点,用户 A 继续处理 bash 脚本 Y,同时分析 bash 脚本 X 的进度,分析行、字符、文件大小等。

但作为参考,bash 脚本 X 然后使用用户 C 早上 8 点保存的数据集,而不是通过生成自己的启动数据集来重新发明轮子,以便与仍生成的 bash 脚本 Y 的更高版本进行比较在那一天。

因此,向在晚上 11 点运行 bash 脚本 X 与 bash 脚本 Y 的任何人显示的比较显示了从上午 8 点到晚上 11 点当天第一次运行所取得的进度 - 不仅仅是从晚上 10 点到晚上 11 点,甚至没有比较,而只是设置一个新的启动数据集。

第二天,用户 B 开始处理 bash 脚本 Y,并通过 bash 脚本 X 分析进度,当天第一次运行,下午 1 点。该值将覆盖前一天的值。因此,更明确地说,数据集的保质期不是正好 24 小时,而是直到午夜。之后,数据集可能仍然存在,因此即使在第二天也存在,但是第二天,当下一次针对 bash 脚本 Y 运行 bash 脚本 X 时,它将不再用作参考值。相反,bash 脚本的行为就好像旧数据集不存在一样:它的结论是“哦,今天还没有保存 bash 脚本 Y 的数据集!所以,我会更改它,以防有任何情况昨天留下的,甚至更早的,比如上周,或者三天前,我都会覆盖它!”

/var/tmp/bash_script_x_logs/或者,额外的 cron 作业可以在每月、每个月、每个工作日的晚上 11:59完成所有内容。但如果你问我,那是不必要的,超载的。

太好了...我喜欢这个。


我正在开发一个小型 bash 脚本 Y,它计算给定 bash 脚本 X 的行数、字符和文件大小,并将当天第一次运行的结果存储在某个位置。

当 bash 脚本 X 运行额外次数时,它应该将存储的值与新值检索进行比较,输出更改的内容以及百分比。例如,“文件大小:-12%”表示 bash 脚本 X 自当天第一次运行以来文件大小减小了 12%。

因此,第一次运行的存储数据是相当短暂的,但应该在重新启动后仍然存在。它的保质期应该是 1 天。因此,重新启动或关闭是不是应该结束存储数据的生命周期,但是一旦 24 小时过去,下一次运行 bash 脚本 Y 就应该用 bash 脚本 X 的新数据覆盖 bash 脚本 X 的旧数据。

根据 Linux 文件层次结构或文件系统层次标准 (FHS),放置这种特定类型数据的最佳位置是什么?

你看:上述数据是半短暂的;如果它完全是短暂的,它将被撤消,并在每次重新启动或关闭时被覆盖。在这种情况下,毫无疑问 /tmp/ 将是存放脚本生成的数据的合适位置。但话说回来,更持久的情况是,它应该在重新启动和关闭后仍然存在,但时间窗口不能超过 24 小时?在哪里可以将此类数据放置在 bash 脚本中?我假设 /var 或 /usr/local/... 可能作为基本目录,然后在其中放置一个名为“bash script Y”的自己的子目录...

答案1

如果这是属于人类用户的数据,则正确的位置将是$XDG_STATE_HOME,默认为$HOME/.local/state,根据 freedesktopXDG规格

与此类似,我会放入临时守护程序数据/usr/local/state- 但这与 FHS 不兼容,这你应该把这样的状态放入/var/lib/<yourprogramsname>.

答案2

我会分两部分进行:

  1. 核心 bash 脚本,为每次运行创建一个新的、唯一命名的临时目录(在合适的父目录下)。

  2. 一个清理脚本(可能由核心 bash 脚本和 cron 调用),用于修剪 N 小时以上的数据。

巧妙地使用调用参数使一个源文件执行这两种功能将是一种优化。

相关内容