【问题标题】:How to implement shared memory in shell scripting?如何在 shell 脚本中实现共享内存?
【发布时间】:2018-11-23 17:47:21
【问题描述】:

我有一个 shell 脚本,它被触发并在 Linux 系统上一次又一次地定期运行,比如每 45 分钟一次。我需要在这个 shell 脚本的不同运行之间共享某些信息。我可以通过哪些不同的方式来实现这一点?这有点类似于进程间通信。我不想使用磁盘 I/O,所以没有文件创建。我可以在内存中创建一些东西,并且可以让它在一段时间内保持活力,例如早上 7 点到 12 点等。在此期间,脚本运行 20 次,并一次又一次地使用/填充该数据结构。脚本在下次运行时需要使用上一次运行中填充的值。

基本上,我正在寻找像 DB 一样工作的东西,但速度更快,修改成本更低。所以我会把我的数据保存在那个数据库中,所有不同的脚本运行都会读取/修改那个东西,而不是一次又一次地去数据库。 /dev/shm 看起来不错的选择,除非有人建议更好的选择。

【问题讨论】:

  • 您可以使用 tmpfs(如 /dev/shm),但它位于虚拟内存中,如果该系统上有其他用途,可能会在 45 分钟内被交换。 echo $BASHPID; $(echo $BASHPID >/dev/shm/foo); cat /dev/shm/foo; rm -f /dev/shm/foo
  • @melpomene 我不想使用 I/O 操作,因为这项工作时间紧迫。
  • 如果时间紧迫,为什么要为此使用 shell 脚本?
  • 内部功能是用java编写的。 Shell 脚本只是定期重复触发主要功能。
  • 听起来像是 Redis 的工作——一个内存数据结构服务器,绑定了 shell、PHP、Python、C、C++、Java...

标签: linux bash shell shared-memory


【解决方案1】:

我不想使用磁盘 I/O,所以没有创建文件。

如果您使用的是 Linux 系统,请在 /dev/shm 中创建一个文件。该目录下存储的文件只存储在共享内存中;它们不会写入磁盘。

根据您的系统配置,/tmp 和/或/var/tmp 可以作为 tmpfs 挂载,使它们的行为方式相同。您的里程可能会有所不同。

【讨论】:

  • 有人在上面评论说这可能会在一段时间内被交换。真的吗?我想控制这个文件,创建/删除等。
  • @JamesBond 如果系统有足够的内存压力,是的。但除非系统完全内存不足,否则小文件不太可能发生这种情况。
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多