Tengo el siguiente archivo de unidad systemd en /etc/systemd/system/emacs.service
:
[Unit]
Description=Emacs: the extensible, self-documenting text editor
Documentatin=man:emacs(1) info:Emacs
[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(progn (setq kill-emacs-hook nil) (kill-emacs))"
Restart=always
Environment=DISPLAY=:%i
TimeoutStartSec=0
[Install]
WantedBy=default.target
Quiero que esto comience en el arranque, así que he ingresado systemctl enable emacs
Sin embargo, cada vez que mi servicio se reinicia, systemctl status emacs
muestra:
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Pero luego, al ingresar systemctl start emacs
y verificar el estado, se devuelve:
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2016-11-11 23:03:59 UTC; 4s ago
Process: 3151 ExecStart=/usr/bin/emacs --daemon (code=exited, status=0/SUCCESS)
Main PID: 3154 (emacs)
Tasks: 2
Memory: 7.6M
CPU: 53ms
CGroup: /system.slice/emacs.service
└─3154 /usr/bin/emacs --daemon
¿Cómo puedo hacer que este proceso se inicie correctamente en el arranque?
After=...
que mencioné.ooh esto es interesante
Elegir una unidad de servicio aleatoria y mirarla, depende de un objetivo específico en lugar de
default.target
. Este último es simbólico ... un enlace configurado a un objetivo específico, semánticamente no tiene sentido. (Versystemctl set-default
)Eso podría explicar por qué su servicio se muestra
disabled
después de habilitarlo. Intente reemplazardefault.target
en su archivo de servicio conmulti-user.target
, por ejemplo.(No informar un error cuando no se habilita parece un defecto en systemd. Casi me pregunto si ahora tiene un directorio
/etc/systemd/system/default.target.wants
).fuente
/etc/systemd/system/default.target.wants
Inside que son mis archivos de servicio. Y sí, no tenía idea de que había algún error.Tiene una variable de entorno DISPLAY, lo que significa que desea que se inicie X11. Por lo tanto, debe tener una forma de bloquear su servicio hasta entonces.
Esto se hace usando la
After=...
opción .No lo he hecho yo mismo, así que no puedo decir que funcionaría, pero es probable que tenga algo que ver con eso
graphical.target
.Otra posibilidad, si el servidor X no se inicia inmediatamente (es decir, tiene una pantalla de inicio de sesión con lightdm o similar), entonces puede que tenga que usar
WantedBy=...
en su lugar:Si se cansa de que funcione con systemd, es posible que desee ver la forma habitual en que los administradores de X-Windows lo hacen funcionar.
Existe el
~/.xprofile
archivo, que funciona como el~/.bashrc
archivo.También están los
~/.config/autostart/*.desktop
archivos. Se iniciará automáticamente las aplicaciones definidas allí.Sin embargo, estas soluciones no abarcan todo el sistema, en caso de que tenga varios usuarios, cada uno debería tener su propia entrada. Además, no inicia la aplicación como root, sino que usted, en cambio.
Como nota al margen, el mensaje "cargado + inactivo (muerto)" significa que systemd tuvo dificultades para iniciar el proceso y, como resultado, decidió abandonarlo . Puede probar manualmente que
name.service
funciona una vez que reinicia con:Esto actualizará el estado e iniciará el servicio correctamente, suponiendo que la información sea correcta. Luego puede verificar el estado nuevamente para ver detalles adicionales:
fuente
Documentatin
. Tu pista sobrejournalctl
me ayudó aquí.Es un error en varios archivos de servicio de Debian:
https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=218609&p=1406567#p1406567 https://forum.armbian.com/topic/9115-still-dont-know-where-to-report -bugs-watchdogservice-rechaza-a-empezar-debido-a-roto-service-file /
El nivel de distribución corregido es
Hay muchas alternativas manuales para esto.
fuente