Acabo de actualizar desde el servidor Ubuntu 14 a la versión 15. Tuve problemas para que mi script de arranque funcionara después de la actualización, y leí que systemd es el nuevo valor predeterminado. Estoy lejos de ser un experto en Linux, así que por favor, sé fácil conmigo :-)
Aquí está lo que era mi script inicial:
description "NZBGet upstart script"
setuid robert
setgid robert
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
exec nzbget -D
end script
pre-stop script
exec nzbget -Q
end script
Basado en el inicio de la página wiki de systemd , utilicé las tablas proporcionadas allí para mapear las cosas lo más cerca que pude en mi nuevo archivo de servicio systemd:
[Unit]
Description=NZBGet Service
[Service]
Type=forking
ExecStart=/usr/local/bin/nzbget -D
ExecStop=/usr/local/bin/nzbget -Q
Restart=on-failure
Este archivo está ubicado en /home/robert/.config/systemd/user/nzbget.service
. Para iniciar el servicio manualmente, he estado haciendo:
$ systemctl --user start nzbget
Esto funciona muy bien. Sin embargo, cuando salgo de mi sesión SSH, el servicio se cierra. Además, no se inicia en el arranque ni en el inicio de sesión del usuario. Quiero que se comporte de la misma manera que un servicio de arranque: quiero que se inicie en el arranque, se ejecute constantemente y como un usuario específico.
¿Qué debo hacer para obtener esta configuración?
systemctl enable
embargo, tuve que especificar la ruta absoluta al nombre de archivo del servicio en el comando, esto no era obvio para mí al principio. También habilitar me dio alguna advertencia sobre una[Install]
sección que falta . Lo ignoré, pero no estoy seguro de si afectará su capacidad para comenzar en el momento del arranque.Install
advertencia fue realmente muy importante. No comenzará en el arranque sinWantedBy=multi-user.target
debajo de la[Install]
sección. Después de añadir esto al.service
archivo, a continuación, puedeenable
ella.[Install]
sección. Espero que ahora sea más útil para cualquiera que lo busque.[email protected]
luegoenable
d, como[email protected]
la configuración,User=%i
significa que el usuario no está codificado y que varios usuarios pueden usar la misma definición. Un ejemplo./etc/systemd/user/
?Puede que le interese utilizar la funcionalidad de "persistencia del usuario" de systemd. Está habilitado a través de
loginctl enable-linger USERNAME
.Causa un administrador de servicio separado para el usuario respectivo que se inicia en el arranque, por lo que sus unidades definidas por el usuario se
~/.config/systemd/user
recogerán y procesarán en los tiempos de arranque y apagado de acuerdo con la configuración de su servicio.También puede usarlo
systemctl --user
para administrar y configurar los servicios, que operarán en el administrador de servicios de su usuario, no en el del sistema.fuente
systemctl --user
Es un hallazgo fantástico. ¡Gracias!systemctl --user
embargo, tenga en cuenta que no parece funcionar para sesiones SSH.