Como reiniciar um programa x11 remoto usando o ssh

1

Ok, eu tenho duas máquinas linux, a máquina A e a máquina B. A máquina A é um servidor que executa o servidor de áudio do icecast. A Máquina B é uma área de trabalho no estúdio que executa o BUTT (Broadcast Using This Tool), um aplicativo x11 que envia o áudio de volta para a máquina A.

O bumbum na máquina B às vezes falha (na verdade, qualquer aplicativo que experimentamos e no Windows também falha), matando o fluxo. No entanto, descobri que configuro o icecast para executar um stript sempre que a fonte for desconectada. Eu tenho autorização de chave privada trabalhando para ssh entre A e B. Eu tenho um script que se eu correr em B (via ssh interativo normal) vai reluanch butt. O que eu não sei é como escrever o script em A, então ele irá rodar o script que eu tenho no B.

Eu tentei isso:

#!/bin/bash
ssh username_placeholder@B '/home/username_placeholder/broadcast.sh'
exit

correndo de A. Mas isso parece manter ssh vivo. Tudo o que eu quero fazer é executá-lo e desligar. broadcast.sh se parece com isso:

#!/bin/bash
killall butt
env DISPLAY=:0 butt&
exit

Isso ocorre porque o butt só é executado no modo gui. e nós queremos ver o gui no estúdio de vez em quando de qualquer maneira. Então, como eu faço isso rodar esse script e desligar, ou existe uma maneira ainda melhor de fazer isso em A sem tentar chamar o script em B. Eu quero que ele mate a bunda se ela ainda estiver rodando e então inicie-a (lembre-se ainda tem que exibir em B, não A. e A é o computador que pode saber quando a fonte em B desliga.)

O computador A executa o servidor ubuntu, e o computador B executa o linux mint no caso de alguém se importar.

    
por UserZer0 29.01.2013 / 05:29

2 respostas

0

Você deve considerar o uso do comando screen, que permitirá que você faça o que quiser com o benefício adicional de poder se reconectar ao shell em qualquer momento.

SSH PARA REMOVER HOST

machine_a:> ssh machine_b

INICIE UMA NOVA SHELL USANDO A TELA

machine_b:> screen
machine_b:> run your script here

DETALHE DA TELA

( Press Ctrl-a then ctrl-d to disconnect from the screen )

SAIR DA CAIXA DO SERVIDOR

machine_b:> exit
machine_a:> 

ENTRAR NO SERVIDOR (em data posterior)

machine_a:>ssh machine_b

LISTA TODAS AS TELAS QUE EXISTEM PARA O SEU USUÁRIO

screen -list  (to show a list of all screen sessions that exist).

eg.    
username@machine_b:~/> screen -list
There are screens on:
        30264.pts-5.machine_b  (Detached)
2 Sockets in /var/run/uscreens/S-username.

RECONECTE A UMA TELA DESTACADA

machine_b:> screen -dr 30264

Nesta fase você pode ver seu script / comando / shell exatamente como você o deixou. Mesmo se o comando que você executou fosse um aplicativo xwindows com exibição definida para a exibição do servidor remoto.

Para criar a tela remota com o seu script em execução da mesma forma que você está tentando fazer usando apenas o ssh sozinho, tente isto:

ssh -t username_placeholder@B 'screen -d -m /home/username_placeholder/broadcast.sh'
    
por 29.01.2013 / 13:03
0

você deve executar o script de transmissão da máquina A com a opção '-f' do ssh:

#!/bin/sh
ssh -f username_placeholder@B /home/username_placeholder/broadcast.sh

isto fará automaticamente 'broadcast.sh' ir para o segundo plano.

O próprio script 'broadcast.sh' deve ficar assim:

#!/bin/sh
killall butt
DISPLAY=:0 butt
    
por 01.02.2013 / 08:12