【问题标题】:What is the proper place to put named pipes on Linux?在 Linux 上放置命名管道的正确位置是什么?
【发布时间】:2013-03-25 13:15:57
【问题描述】:

我有一些进程通过命名管道相互通信。目前,我正在本地创建所有管道,并将应用程序保存在同一个工作目录中。在某些时候,假设这些程序可以(并且将会)从不同的目录运行。我需要在已知位置创建我正在使用的这些管道,以便所有不同的应用程序都能找到他们需要的管道。

我是 Linux 新手,不熟悉文件系统结构。在 Windows 中,我会使用 AppData 文件夹之类的东西来保存这些管道。我不确定 Linux 中的等价物是什么。

/tmp 目录看起来可能运行良好。我在一些地方读到它在系统关闭时被清除(这很好,当我开始备份时我可能没有重新创建管道。)但我看到其他一些人说他们正在丢失文件当系统启动时,就好像它被定期清理一样,我不希望在我的应用程序使用这些管道时发生这种情况!

有没有更适合特定应用商店的地方?或者/tmp 是我想要保留这些的地方(因为它们毕竟是临时的。)?

【问题讨论】:

    标签: linux filesystems pipe named-pipes tmp


    【解决方案1】:

    我见过 SaltStack 使用 /var/run。唯一的问题是您需要 root 访问权限才能写入该目录,但是假设您要将进程作为系统守护程序运行。 SaltStack 在安装时创建/var/run/salt 并将所有者更改为salt 以便以后可以在没有root 权限的情况下使用它。

    我还检查了 Filesystem Hierarchy Standard,尽管它并不那么重要,即使他们说:

    维护瞬态 UNIX 域套接字的系统程序必须将它们放在此目录中。

    由于命名管道非常相似,我会采用相同的方式。

    【讨论】:

    • 我很抱歉没有早点看到您的答案,但这正是我正在寻找的那种回应。我不知道'Filesystem Hierarchy Standard',显然这对于​​像我这样的初出茅庐的 Linux 开发人员来说有各种各样的信息。除了/var/run,我的用例似乎也可以接受/var/tmp,因为它也可以通过重新启动来保留它们。再次,非常感谢!
    【解决方案2】:

    在带有 systemd /run/user/<userid> 的较新 Linux 发行版上(如果不存在,则在登录期间由 pam_systemd 创建)可用于打开套接字并将 .pid 文件放在那里,而不是 /var/run 只有 root 有使用权。另请注意,/var/run 是指向/run 的符号链接,因此也可以使用/var/run/user/<userid>。欲了解更多信息,请查看this thread。这个想法是系统守护进程应该在安装期间创建一个具有适当权限的/var/run/<daemon name>/ 目录,并将它们的套接字/pid 文件放在那里,而用户运行的守护进程(例如pulseaudio)应该使用/run/user/<userid>/。另一种选择是/tmp/var/tmp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2010-09-15
      • 2015-01-04
      • 2018-09-12
      • 2021-06-12
      相关资源
      最近更新 更多