web-dev-qa-db-fra.com

Comment exécuter weechat et screen en tant que service parvenu sans erreur?

Je veux exécuter weechat constamment en arrière-plan afin que je puisse y accéder et le rattacher via l'écran.

J'essaie d'accomplir cela via le fichier suivant dans /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

Ensuite, je lance Sudo initctl start chatscreen Pour démarrer le service, qui imprime chatscreen start/running, process 3090.

Lorsque j'exécute Sudo initctl status chatscreen Un instant plus tard, il imprime chatscreen stop/waiting, Et aucun processus d'écran ou weechat ne s'exécute selon htop.

dmesg affiche les erreurs suivantes:

[ 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

Aucun fichier /var/log/upstart/chatscreen.log N'existe.

Lorsque je ssh en tant qu'utilisateur de chat et que j'exécute /usr/bin/screen -S chatscreen -Dm /usr/bin/weechat Dans le shell, il s'exécute comme prévu. (Il exécute la commande et bloque. Je peux alors démarrer une autre session ssh, screen -r,/Exit weechat, et la commande d'écran d'origine revient.)

J'utilise Ubuntu Server 14.04.1 LTS 64 bits sur DigitalOcean.

EDIT: J'ai également essayé d'utiliser dtach au lieu de screen. La seule différence est que j'ai dû utiliser expect fork Parce que dtach -n Fourches. dtach -n Peut être exécuté sans terminal, ce qui pourrait être un problème avec screen.

Malheureusement, je suis passé par le même cycle de réapparition sans aucun fichier journal correspondant dans /var/log/upstart. Mais dmesg a dit: init: chatdtach main process (1073) terminated with status 1 plusieurs fois.

2
Slix

Upstart, même en utilisant setuid, ne définit pas la variable d'environnement HOME. weechat essaie d'utiliser cette variable pour rechercher son répertoire de configuration lorsque -d n'est pas spécifié.

impressions weechat Error: unable to get HOME directory en réponse à ce problème. Cependant, il n'a pas été enregistré car weechat n'avait nulle part où produire cette erreur, à l'exception de stdout, avec lequel screen/dtach n'a rien fait, sauf qu'il doit retourner consciencieusement parce que le processus d'origine s'est terminé.

Vous pouvez vérifier si c'est votre problème en remplaçant la ligne exec par ceci:

exec /usr/bin/weechat

Si /var/log/upstart/chatscreen.log dit Error: unable to get HOME directory, alors c'était le problème.

Voici un fichier de service parvenu corrigé:

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 si vous préférez le dtach léger:

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

La variable d'environnement LANG est telle que weechat reconnaît le détacheur comme prenant en charge UTF-8. Sans cela, mon weechat affichait des boîtes étranges sur le côté droit au lieu du séparateur vertical de liste de pseudos. Modifiez-le selon les paramètres régionaux que vous souhaitez utiliser.

Je ne sais pas si l'écran nécessite LANG. Je ne l'ai testé qu'avec dtach.

0
Slix