简短的回答

简短的回答

我正在尝试使用以下命令将当前基于 VM 的基础架构迁移到基于 Docker 的基础架构docker-baseimage,它使用runit/runsv来启动和监督系统服务。现在虽然很明显非常很容易将自己编写的Python程序安装为服务,但我正在努力将/etc/init.d/*脚本转换为runit服务。

有时这很容易,并且也有一个列表http://smarden.org/runit/runscripts.html,但其中一些脚本不适用于(最新版本的)Ubuntu 路径,而且我想知道有时是否应该将该进程嵌入到 chroot 中或让它以不同的用户身份运行。

那么,有没有一种安全可靠的方法将 Ubuntu 中的 init 脚本转换为简单的 runit-runnable 脚本呢?

答案1

简短的回答

目前还没有,没有专门针对 runit 的自动化方法。

长答案

有几种方法可以解决这个问题。

使用预构建脚本

第一个是拥有一组预先构建的脚本。这些可以从其他项目中提取。 Void Linux 使用 runit 作为其基础 init 和管理程序,因此它可能会令人感兴趣。 Github上有一个项目叫runit 脚本那可能有一些你需要的东西。而且我会为我自己的项目做一个无耻的插件,监督脚本,尽管该项目仍在开发中,但其中一些已预先烘焙并准备就绪。

使用框架

第二是提供一个框架,以简化编写脚本的过渡。 点燃是一种可能性。还有,土岐四叶草的监督脚本框架(不要与我自己的项目混淆)也可以提供您所寻求的内容。在这种情况下,没有预先构建的定义,但您可以获得一些 shell 脚本(可能还有其他程序)来帮助您更轻松地进行此转换。

借用现有的脚本和工具

三是借用其他项目的脚本。这意味着要出去真正寻找它们。那里有一些,但你必须真正看看。

以艰难的方式做到这一点

最后,有时您只需要自己编写即可。坦率地说,如果您绝望,请复制原始 /etc/init.d/(whatever) 文件,将其放在一边,然后编辑该文件。通常,在 init.d 脚本的底部,您会找到一个 CASE 语句和朋友,从那里您可以看到是否有任何不应该存在但却存在的奇怪的内置命令行开关。不要理会任何超出内部start)stop)其中的内容,因为它们在使用主管时不适用。环顾四周,看看它是否需要设置 /var/run/(无论什么)目录,这也总是很重要(如果创建它,请不要忘记设置所有权!)。在顶部,如果作者做得正确,通常会有一组环境变量,其中包含真实的守护进程名称及其选项。从那里您通常可以快速拼凑出一个小脚本。

相关内容