Serviço e persistência do Systemd Initrd

2

Eu preciso executar um daemon simples a partir da imagem do initrd do sistema. De acordo com a documentação system.initrd, quando o systemd estiver sendo executado diretamente do initrd, todos os processos em execução serão eliminados em switch-root , a menos que argv[0][0] do caractere do processo principal seja @ . A única maneira que eu encontrei para alterar argv[0] para adicionar declaração adequada no código-fonte do aplicativo, mas infelizmente este é um software proprietário e eu não tenho acesso ao seu código-fonte. Eu também descobri que o comando shell exec pode executar o processo sob um nome diferente, alterando o parâmetro argv[0] , então escrevi um arquivo de serviço simples para o systemd usando exec para implantar novo processo e funciona, ps aux mostra esse processo de serviço está sendo executado sob o nome correto ( @bin/process-name ... ). Como mencionado anteriormente, os processos com argv[0] iniciando com o caractere @ não devem ser eliminados em switch-root .

Minha receita do sistema:

[Unit]
Description=Simple service

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

Certifico-me de que este serviço está funcionando antes de switch-root , ativando-o manualmente no estágio initrd, mas ele é eliminado como qualquer outro processo em execução. Eu tentei executá-lo como aplicativo normal, mas isso não está funcionando também. Eu até escrevi meu próprio aplicativo, que muda seu argv[0][0] para @ e, como antes, é eliminado em switch-root . Então, como executar o serviço persistente do initrd? Parece que o systemd mata TODOS os processos durante switch-root não deixando nada para trás, mesmo processos especiais que não deveriam ser eliminados.

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

Fonte: link

    
por Galmido 07.09.2014 / 14:14

0 respostas