gpt4 book ai didi

linux - 如何为每个主管程序在/运行中创建一个目录?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:02 25 4
gpt4 key购买 nike

我有一个 Ubuntu 14.04 LTS 服务器在 Supervisor 下运行几个不同的程序。许多程序需要在文件系统上存储套接字和其他命名管道,而 /run 似乎是这些类型文件的理想选择。不幸的是,/run 是 tmpfs 并在每次重新启动时被删除,并且需要 root 权限来(重新)创建每个程序可以写入的目录。

我需要一种方法来在 /run 中创建一些子目录,并将所有者/模式设置为每个程序都可以使用的内容,并在每次重新启动时在 Supervisor 尝试启动它们之前这样做。 Supervisor 似乎不支持在启动程序之前运行预启动命令的机制。

这类问题的大多数其他答案都建议在初始化脚本中进行,但它属于 Supervisor 的包,我不想弄乱它(或者在上游更改时必须维护它)。

如果这台机器有 Systemd,我似乎可以使用 /etc/tmpfiles.d,但它没有。

我想出的最好的主意是为每个只创建目录而不实际启动任何进程的程序使用单独的 Upstart pre-start 脚本。像这样的东西:

/etc/init/myapp1.conf

start on runlevel [2345]

pre-start script
mkdir -p -m 0755 /var/run/myapp1
chown app1user: /var/run/myapp1
end script

...没有任何 exec 行。我不是 100% 确定这是有效的还是理智的,但它似乎有效。有没有更简洁的方法来做这样的事情?

最佳答案

您是否在特定用户的监督下运行您的应用程序?因为默认情况下,应用程序以 root 作为所有者运行。

我要做的是一个执行以下操作的简单脚本:

  1. 检查是否创建了所需的文件/文件夹。
  2. 必要时设置所有者。
  3. 然后启动您的应用程序

将此脚本放入您的主管配置中,而不是直接启动您的应用程序。确保它以 root 身份运行(从配置中删除用户或设置 user=root)。

这样您就可以始终确保您的环境已设置并且您的目录存在。因此,如果您出于某些原因清除了 tempfs,您的脚本仍将运行而无需重新启动。

如果您需要在特定用户下运行您的应用程序,您可以执行以下操作:

  1. 将前两点移到单独的设置脚本中(就像您现在使用解决方案所做的那样)。
  2. 创建另一个脚本,它使用 sudo 调用您的设置脚本并启动您的应用程序
  3. 将您的自定义用户和脚本添加到 sudo 文件,这样您的用户就可以在没有密码提示的情况下以 root 身份调用该脚本。 (请注意:如果有人可以访问您的服务器,这会带来安全风险。确保您的安装脚本不可写)

关于linux - 如何为每个主管程序在/运行中创建一个目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com