Reinicia um processo em tela destacada via ssh

3

Eu tenho um servidor com várias telas em execução, cada uma com sua própria lista de servidores de nós para diferentes portas. Eu gostaria de criar trabalhos Jenkins para ssh na caixa, reconectar uma tela específica, parar o processo, puxar do git, reiniciar o aplicativo e desanexar a tela. Você pode 'encher' um Ctrl + C em uma tela? Pensando em algo do tipo:

ssh myuser@myserver "screen -S 1234.myscreen -X stuff '[[Ctrl+C]] && git pull origin master && npm install && node app' [[Detach screen]]"
    
por swider 14.03.2013 / 19:30

2 respostas

2

Ctrl + C envia um SIGINT. Então, se você puder determinar o PID do processo que deseja sinalizar, você pode fazer kill -INT pid antes do git pull ou killall -INT processname se quiser pará-los todos, supondo que seu killall não se comporte como killall5 .

Quanto ao script do destacamento de uma sessão de tela, não faço ideia. Talvez alguém possa te ajudar lá.

EDIT: Ocorreu-me apenas que você não precisa fazer o script do destacamento ou mesmo fazer qualquer coisa com a tela. Basta executar algo assim dentro da tela:

while sleep 1; do
    ./some_program      # which saves its PID to a pidfile
    git pull
done

E então você pode executar isso a partir da tela externa, por cima do ssh:

kill -INT $(cat pidfile)

Se o seu processo não salvar um pidfile, você pode tentar usar o start-stop-daemon para fazer isso:

start-stop-daemon --start --exec ./some_program --pidfile pidfile --make-pidfile
    
por 15.03.2013 / 02:48
1

A seqüência Ctrl + C deve ser inserida como um caractere literal ^ C:
Ctrl + V (permite a inserção de um caractere literal), então Ctrl + C

Quando a tela stuff é usada, a tela não interativamente anexa a sessão, portanto, não é necessário desanexá-la. Você pode, no entanto, precisar de um retorno de carro após o último comando, inserido como um literal: Ctrl + V Ctrl + M

    
por 15.03.2013 / 09:28