systemctl (Fedora 17) e consoles de processos gerados em interação

2

Introdução

Eu recentemente atualizei para o Fedora 17 e estou me acostumando com o mais novo gerenciador de daemon systemctl versus scripts init de shell.

Um recurso de que preciso em alguns dos meus daemons é a capacidade de interagir com seus consoles porque os desligamentos não limpos iniciados pelo próprio processo podem causar danos ao banco de dados. Portanto, executar um systemctl stop service-name.service , por exemplo, pode causar perda de dados irreversível.

Esses consoles lêem a entrada do usuário por meio de métodos stdin ou similares, então o que eu tenho feito no meu sistema operacional antigo é colocar esses daemons em primeiro plano em uma sessão screen , e suspendo essa tela sessão com ^A ^z . Também vale a pena notar que agora eu fiz systemctl fazer isso automaticamente se o computador for reinicializado, mas ele ainda não resolve o meu possível problema de corrupção de dados que estou tentando evitar.

Minha pergunta

Existe uma maneira de usar systemctl para interagir diretamente com o console de processos que ele gera? Posso ligar um processo através de systemctl para obter acesso ao seu console?

Obrigado

Vocês sempre dão ótimas respostas, então estou me voltando para você!

    
por Sean 18.09.2012 / 17:14

1 resposta

1

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

StandardInput=

Controls where file descriptor 0 (STDIN) of the executed processes is connected to. Takes one of null, tty, tty-force, tty-fail or socket. If null is selected standard input will be connected to /dev/null, i.e. all read attempts by the process will result in immediate EOF. If tty is selected standard input is connected to a TTY (as configured by TTYPath=, see below) and the executed process becomes the controlling process of the terminal. If the terminal is already being controlled by another process the executed process waits until the current controlling process releases the terminal. tty-force is similar to tty, but the executed process is forcefully and immediately made the controlling process of the terminal, potentially removing previous controlling processes from the terminal. tty-fail is similar to tty but if the terminal already has a controlling process start-up of the executed process fails. The socket option is only valid in socket-activated services, and only when the socket configuration file (see systemd.socket(5) for details) specifies a single socket only. If this option is set standard input will be connected to the socket the service was activated from, which is primarily useful for compatibility with daemons designed for use with the traditional inetd(8) daemon. This setting defaults to null.

Link para cotação

Ah, e se isso não funcionar, faremos algo realmente complicado com sockets do Unix que eu tenho certeza que você irá amar .

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

You could try writing to it's /proc pid directory. Say your daemons' pid is 2000, try writing to /proc/2000/fd/0

fonte

Você pode adicionar essa linha ao ExecStop =, que libera você de ter que interagir manualmente.

    
por 20.09.2012 / 22:54