Linux,如何使用不同的文件系统视图运行进程

Linux,如何使用不同的文件系统视图运行进程

我需要运行具有不同配置的进程的多个实例。但是,此进程被硬编码为从特定文件读取配置(不用说它是闭源的)。此外,该进程会定期将配置写回文件。

我尝试在移动该实例的正确配置文件后使用脚本启动该过程,但由于实例相互覆盖了配置文件,因此失败。

本质上我需要一个相当于在文件系统级别使用不同环境启动的功能

编辑:每个进程都以独立用户身份运行,但会在一个公共位置查找配置文件,谢谢

答案1

看一下命名空间,特别是对于挂载。您可能需要复制根文件系统,因此还要查看覆盖 FS 和/或绑定挂载。

另一种选择是使用LD_PRELOAD并劫持该open调用,这样您就可以用所需的路径替换配置文件(或其他文件)。

用户空间工具被调用unshare,因此你可以执行以下操作

$ mkdir dir1
$ mkdir dir2
$ touch dir1/foo.conf
$ touch dir2/foo.conf
$ rm conf/foo.conf
$ sudo unshare -m /bin/bash
# mount --bind dir1 conf
# su your_userid
$ ls conf
foo.conf

等等也是如此dir2。根据需要编写 Skript。

答案2

根据程序,您可以在其自己的(chroot)监狱中设置每个实例 - 您可能需要使用绑定挂载以允许它访问系统的公共部分。

chroot jail 在目录中创建虚拟根目录(通常使用 chroot 命令)。在创建 jail 之前,可以使用绑定挂载,以将文件系统的部分副本作为 rooted jail 目录的子目录可见。

另一种选择是使用某种虚拟化 - 我相信 Docker 容器可以满足您的需求(但我没有用过太多)。当然 KVM 可以做到这一点,但它发现它太大了 - 即每个实例一个完整的虚拟机 - 不切实际。

相关内容