Systemd Initrd 服务和持久性

Systemd Initrd 服务和持久性

我需要从系统 initrd 映像运行一个简单的守护进程。根据 system.initrd 文档,当 systemd 直接从 initrd 运行时,所有正在运行的进程都将被杀死switch-root,除非argv[0][0]主进程的字符是@。我发现改变argv[0]它的唯一方法是在应用程序源代码中添加正确的语句,但不幸的是这是一个专有软件,我无权访问其源代码。我还发现 shellexec命令可以在不同的名称下运行进程,更改它的argv[0]参数,所以我为 systemd 编写了简单的服务文件,用于exec部署新进程,它可以工作,ps aux显示服务进程正在正确的名称(@bin/process-name ...)下运行。如前所述,以字符argv[0]开头的进程@不应在 上被终止switch-root

我的系统食谱:

[Unit]
Description=Simple service

[Service]
ExecStart=/bin/bash -c 'exec -a "@bin/process-name" /bin/application'

switch-root我通过在 initrd 阶段手动启用该服务来确保该服务之前正常工作,但它像任何其他正在运行的进程一样被杀死。我尝试将其作为普通应用程序运行,但这也不起作用。我什至编写了自己的应用程序,将其更改为argv[0][0]@并且就像它被杀死之前一样switch-root。那么,如何从 initrd 运行持久服务呢?看起来 systemd 会杀死所有进程,不switch-root留下任何东西,甚至是不应该被杀死的特殊进程。

Initrd: Dracut
OS: Debian Jessie
Systemd version: 208-8

来源:http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/

相关内容