Como executo o weechat e a tela como um serviço iniciante sem erro?

2

Eu quero rodar o weechat constantemente em segundo plano para que eu possa fazer ssh e reconectá-lo via tela.

Estou tentando realizar isso por meio do seguinte arquivo em /etc/init/chatscreen.conf :

description     "Run a persistent weechat within a screen"

start on runlevel [2345]

respawn

setuid chat
setgid chat

exec /usr/bin/screen -S chatscreen -Dm /usr/bin/weechat

Em seguida, corro sudo initctl start chatscreen para iniciar o serviço, que imprime chatscreen start/running, process 3090 .

Quando eu executo sudo initctl status chatscreen um momento depois, ele imprime chatscreen stop/waiting e nenhuma tela ou processos estão sendo executados de acordo com o htop.

dmesg mostra os seguintes erros:

[ 5649.430032] init: chatscreen main process ended, respawning
[ 5649.454638] init: chatscreen main process ended, respawning
[ 5649.476572] init: chatscreen main process ended, respawning
...
[ 5649.608818] init: chatscreen main process ended, respawning
[ 5649.627409] init: chatscreen respawning too fast, stopped

Nenhum arquivo /var/log/upstart/chatscreen.log existe.

Quando eu ssh como usuário de chat e executo /usr/bin/screen -S chatscreen -Dm /usr/bin/weechat no shell, ele é executado como esperado. (Ele executa o comando e bloqueia. Eu posso então iniciar outra sessão ssh, screen -r , / exit weechat, e o comando original da tela retorna.)

Estou executando o Ubuntu Server 14.04.1 LTS de 64 bits no DigitalOcean.

EDIT: Eu também tentei usar dtach em vez de tela. A única diferença é que eu tive que usar expect fork porque dtach -n forks. dtach -n pode ser executado sem um terminal, o que achei que poderia ser um problema com screen .

Infelizmente, passei pelo mesmo ciclo de respawning sem nenhum arquivo de log correspondente em /var/log/upstart . Mas o dmesg disse: init: chatdtach main process (1073) terminated with status 1 várias vezes.

    
por Slix 10.11.2014 / 09:25

1 resposta

0

Upstart, mesmo ao usar o setuid, não define a variável de ambiente HOME . weechat tenta usar essa variável para procurar seu diretório de configuração quando -d não está especificado.

weechat imprime Error: unable to get HOME directory em resposta a esse problema. No entanto, ele não foi lógico porque não tínhamos onde enviar esse erro, exceto stdout, que screen / dtach não fez nada além de obedientemente retornar porque o processo original terminou.

Você pode verificar se esse é o seu problema alterando a linha exec para esta:

exec /usr/bin/weechat

Se /var/log/upstart/chatscreen.log disser Error: unable to get HOME directory , então este foi o problema.

Aqui está um arquivo de serviço do upstart corrigido:

description     "Run a persistent weechat within screen"

respawn

setuid chat
setgid chat

# Not sure if screen needs this.
env LANG=en_US.utf8

exec screen -S chatscreen weechat -d /home/chat/.weechat

Ou se preferir o dtach leve:

description     "Run a persistent weechat within dtach"

respawn

setuid chat
setgid chat

expect fork

env LANG=en_US.utf8

exec dtach -n /home/chat/chatdtach.sock weechat -d /home/chat/.weechat

A variável de ambiente LANG é para que possamos reconhecer o desacoplador como suportando UTF-8. Sem isso, meu weechat estava exibindo caixas estranhas no lado direito em vez do separador vertical de lista de apelidos. Altere-o para qualquer localidade que você gostaria de usar.

Não tenho certeza se a tela requer LANG. Eu só testei com dtach.

    
por Slix 14.11.2014 / 00:37