Estou tentando iniciar o daemon do emacs por meio do upstart. Aqui está o meu script
# emacs --daemon - Emacs daemon
#
# The Emacs daemon provides a server for Emacs clients.
description "Emacs daemon"
start on runlevel[2345]
stop on runlevel[!2345]
respawn
respawn limit 10 5 # respawn up to 10 times, waiting 5 seconds each time
pre-start script
echo "Starting emacs daemon..." > /home/eric/Desktop/emacs.log
end script
pre-stop script
emacsclient -n -e '(save-persistent-scratch)'
end script
exec emacs --daemon
Eu posso começar isso com sudo initctl start emacs
. No entanto, isso não é executado durante a inicialização (ou emacs --daemon morre?). Chamar sudo initctl list
exibe o trabalho como emacs stop/waiting
, o que aparentemente significa que o trabalho ainda não foi iniciado. No entanto, chamar runlevel
retorna N 2
.
Como corrijo isso?
Edit: v2 do arquivo conf (adicionado espera fork e correu o emacs sob minha conta)
Edit: v3 (corrigido para esperar daemon)
# emacs --daemon - Emacs daemon
#
# The Emacs daemon provides a server for Emacs clients.
description "Emacs daemon"
start on runlevel[2345]
stop on runlevel[!2345]
expect daemon
respawn
respawn limit 10 5 # respawn up to 10 times, waiting 5 seconds each time
pre-start script
echo "Starting emacs daemon..." > /home/eric/Desktop/emacs.log
end script
pre-stop script
emacsclient -n -e '(save-persistent-scratch)'
end script
exec start-stop-daemon --start --chuid eric --exec /usr/bin/emacs -- --daemon -u eric
Editar:
Depois de pesquisar, descobri que o upstart fornece uma ferramenta chamada initctl check-config
, que pode verificar as condições inacessíveis.
A execução da ferramenta revelou que meu arquivo conf estava sem um espaço em runlevel[2345]
, como runlevel [2345]
. O daemon agora é iniciado corretamente.
No entanto, quando executo sudo initctl stop emacs
, ele é interrompido e o daemon do emacs não é eliminado. Eu acho no dmesg isso e só isso
[ 4378.169249] init: emacs goal changed from start to stop
Mas, se eu matar o emacs através de kill
ou emacsclient -n -e '(kill-emacs)'
, isso aparece no dmesg
[ 4378.169286] init: emacs state changed from spawned to stopping
[ 4378.169314] init: event_new: Pending stopping event
[ 4378.169325] init: Handling stopping event
[ 4378.169392] init: event_finished: Finished stopping event
[ 4378.169399] init: emacs state changed from stopping to killed
[ 4378.169431] init: emacs state changed from killed to post-stop
[ 4378.169450] init: emacs state changed from post-stop to waiting
[ 4378.169473] init: event_new: Pending stopped event
[ 4378.169484] init: job_change_state: Destroyed inactive instance emacs
[ 4378.169542] init: Handling stopped event
[ 4378.169594] init: event_finished: Finished stopped event
A questão agora é: por que o initctl stop emacs
não funciona?