¿Cómo hago que mi servicio systemd se ejecute a través de un usuario específico y comience en el arranque?

Pregunta:

Acabo de actualizar desde el servidor Ubuntu 14 a la versión 15. Tuve problemas para que mi script advenedizo funcionara después de la actualización, y leí que systemd es el nuevo predeterminado. Estoy lejos de ser un experto en Linux, así que por favor, no me digas 🙂

Esto es lo que era antes mi guión advenedizo:

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 la página wiki advenedizo a systemd , utilicé las tablas proporcionadas allí para mapear las cosas tan cerca como 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 se encuentra 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 apaga. Además, no se inicia en el arranque o en el inicio de sesión del usuario. Quiero que se comporte de la misma manera que lo hizo como un servicio advenedizo: quiero que se inicie en el arranque, se ejecute constantemente y como un usuario específico.

¿Qué debo hacer para obtener esta configuración?

Respuesta:

Primer problema

Puede especificar las directivas User= y Group= en la sección [Service] del archivo de la unidad.

Segundo problema

Para que el servicio se ejecute al arrancar, no debe ponerlo en su carpeta de inicio. En su lugar, colóquelo en /etc/systemd/system/ . Esta es la carpeta que debe utilizar el administrador del sistema (es decir, usted) para agregar nuevos servicios en todo el sistema.

Otras carpetas incluyen:

  • /usr/lib/systemd/system/ está destinado a paquetes que desean instalar archivos unitarios, aunque en Debian y Ubuntu la carpeta es en realidad /lib/systemd/system/ porque las diversas carpetas bin y lib no se han fusionado en una unificada /usr/ prefijo todavía.
  • /usr/local/lib/systemd/system/ es para instalar unidades mediante paquetes compilados localmente.

Probando la unidad

Una vez que el archivo de la unidad esté en una ubicación adecuada, puede intentar iniciar la unidad inmediatamente escribiendo systemctl start <UNIT_FILENAME> como de costumbre. Debería funcionar sin tener que escribir la ruta completa de la unidad. La extensión tampoco tiene que especificarse si es .service .

Habilitando la unidad

Antes de que pueda habilitar su unidad, necesita agregar una sección [Install] , bajo la cual debe agregar la directiva WantedBy=multi-user.target . Esta directiva especifica la etapa del proceso de inicio durante la cual se debe iniciar el servicio (si estuviera habilitado). multi-user.target es apropiado para la mayoría de los servicios.

Una vez que se agrega esa información, puede usar systemctl enable <UNIT_FILENAME> , que habilita la unidad, haciendo que systemd de ahora en adelante lo inicie automáticamente durante el arranque en la etapa especificada.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım