Usando um script para controlar um processo já em execução na tela

0

Devido ao fato de o Gnu Screen ser difícil para o Google, estou com dificuldades para encontrar uma resposta para esse.

Como um exemplo concreto (o que você está tentando fazer):
Executar um processo do servidor (no linux) inicia um grupo de saída (STDOUT STDERR) que pode receber entrada de STDIN.
Periodicamente, quero emitir um comando ( /snapshot ) para fazer o backup do estado atual.
Eu quero configurar o cron para executar um comando que ocasionalmente injeta isso no STDIN para o servidor.

Até agora eu tenho pensado que o processo do servidor pode ser executado em uma sessão de tela desanexada. E eu acho que o comando exec da tela pode se conectar a diferentes sessões de terminal na tela e entregar STDIN e STDOUT para outro processo. Mas ler os documentos foi confuso. E não ajuda que eles digam que há uma "ilustração confusa" para explicar isso ainda mais.

Se alguém fez isso, como especifico um comando cron para realizar isso. Até agora eu estou pensando (mostre o que você fez):

5 * * * * /usr/bin/screen -p 1 -X 'exec ! echo "/snapshot"'

Mas aqui não sei se isso funcionará, se isso realmente segmentaria o processo do servidor na janela 1 e o que acontece depois disso; saída de tela?

    
por dlamblin 09.12.2011 / 23:12

1 resposta

1

Eu não acho que entendo completamente o seu caso de uso concreto, mas aqui está uma possível abordagem que pode ajudar.

Em vez de fazer o despejo do seu processo para stdout e stderr , tenha aqueles gravados em um arquivo. Como alternativa, você pode usar tee para gravar em um arquivo e no terminal.

Também redirecione stdin usando tail -f em um arquivo de entrada separado. Crie uma tarefa cron que grava uma nova linha no arquivo de entrada no intervalo apropriado.

Você ainda pode executar seu processo em screen se quiser verificá-lo periodicamente (ou apenas para mantê-lo ativo).

Inicie seu processo como:

tail -f /path/to/myinputfile.txt | myprocess 2&>1 >/path/to/outputfile.txt

ou, usando tee :

tail -f /path/to/myinputfile.txt | myprocess 2&>1 | tee /path/to/outputfile.txt

E configure o trabalho cron de entrada como:

5 * * * * /bin/cat "/snapshot" >> /path/to/myinputfile.txt
    
por 01.02.2012 / 21:37

Tags