Introdução

Introdução

Introdução

Atualizei recentemente para o Fedora 17 e estou me acostumando com o systemctlgerenciador de daemon mais recente versus scripts de inicialização do shell.

Um recurso que preciso em alguns dos meus daemons é a capacidade deinteragir com seus consolesporque desligamentos impuros não iniciados pelo próprio processo podem causar corrupção do banco de dados. Portanto, executar um, systemctl stop service-name.servicepor exemplo, pode causar perda irreversível de dados.

Esses consoles leem a entrada do usuário por meio de stdin ou métodos semelhantes, então o que tenho feito em meu antigo sistema operacional é colocar esses daemons em primeiro plano em uma screensessão, e eususpensoaquela sessão de tela com ^A ^z. Também é importante notar que agora fiz systemctlisso automaticamente se o computador for reinicializado, mas ainda não resolve meu problema potencial de corrupção de dados que estou tentando evitar.


Minha pergunta

Existe uma maneira de systemctlinteragir diretamente com o console de processos que ele gera? Posso conectar um processo systemctlpara obter acesso ao seu console?


Obrigado

Vocês sempre dão ótimas respostas, então estou recorrendo a vocês!

Responder1

Parece que você pode redirecioná-lo para um tty.

StandardInput=

Controla onde o descritor de arquivo 0 (STDIN) dos processos executados está conectado. Aceita null, tty, tty-force, tty-fail ou socket. Se null for selecionado, a entrada padrão será conectada a /dev/null, ou seja, todas as tentativas de leitura pelo processo resultarão em EOF imediato. Se tty for selecionado, a entrada padrão é conectada a um TTY (conforme configurado por TTYPath=, veja abaixo) e o processo executado se torna o processo de controle do terminal. Se o terminal já estiver sendo controlado por outro processo, o processo executado aguarda até que o processo de controle atual libere o terminal.tty-force é semelhante ao tty, mas o processo executado é forçado e imediatamente transformado no processo de controle do terminal, potencialmente removendo processos de controle anteriores do terminal.tty-fail é semelhante ao tty, mas se o terminal já tiver um processo de controle, a inicialização do processo executado falha. A opção socket só é válida em serviços ativados por soquete e somente quando o arquivo de configuração do soquete (veja systemd.socket(5) para detalhes) especifica apenas um único soquete. Se esta opção for definida, a entrada padrão será conectada ao soquete a partir do qual o serviço foi ativado, o que é útil principalmente para compatibilidade com daemons projetados para uso com o daemon inetd(8) tradicional. Essa configuração é padronizada como nula.

Link para cotação

Ah, e se isso não funcionar, faremos algo realmente complicado com soquetes Unix que tenho certeza que você faráamor.

Dane-se esse absurdo, tente algo assim se o acima não for aceitável:

Você pode tentar escrever no diretório /proc pid. Digamos que o pid dos seus daemons seja 2000, tente escrever para /proc/2000/fd/0

fonte

Você pode adicionar essa linha a ExecStop=, o que evita que você tenha que interagir manualmente.

informação relacionada