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.
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.