es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ejecutar un servicio utilizando SystemD con las variables de entorno de un usuario específico?

Tengo un script udpater.service destinado a iniciar una aplicación de servicio. El problema es que cuando ejecuto el trabajo de actualización como usuario regular, funciona muy bien. En el momento en que intento hacer lo mismo como un servicio… no funciona. Este es el updater.service en cuestión:

<h1>este es el script del servicio de actualización.</h1>

<p>[Unit]
Description=Destinado a actualizar la base de datos de respaldo.</p>

<p>[Service]
SyslogIdentifier=Actualizar_DB_de_respaldo
Type=forking
User=usuario_actualización
WorkingDirectory=/common/deploy/scripts
ExecStart=/common/deploy/scripts/actualizar_db.sh start
ExecStop=/common/deploy/scripts/actualizar_db.sh stop
ExecReload=/common/deploy/scripts/actualizar_db.sh restart

usuario_actualización es el usuario en el que se supone que debe ejecutarse todo. Lo único que puedo suponer que es diferente son las variables de entorno. Si inicio sesión en el servidor como usuario_actualización e imprimo “env”, veo docenas de variables de entorno. Si imprimo “env” como la primera línea ejecutable en actualizar_db.sh, veo alrededor de 7 variables de entorno. Parece que no se incluye todo en el entorno de ejecución cuando se ejecuta actualizar_db.sh como servicio. ¿Hay alguna forma de importar las mismas variables de entorno cuando actualizar_db.sh se ejecuta como servicio?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay varias formas de importar las mismas variables de entorno cuando se ejecuta “update_db.sh” como un servicio:

    1. Especificar todas las variables de entorno necesarias en el script “updater.service” usando la directiva “Environment”:
    [Service]
    Environment="VAR1=valor1"
    Environment="VAR2=valor2"
    ...
    
    1. Utilizar la directiva “EnvironmentFile” para especificar un archivo que contenga las variables de entorno necesarias:
    [Service]
    EnvironmentFile=/ruta/al/archivo/env
    
    1. Utilizar el comando “source” para cargar las variables de entorno necesarias desde un archivo dentro del script “update_db.sh”:
    #!/bin/bash
    source /ruta/al/archivo/env
    ...
    

    Utilizando uno de estos métodos, puedes asegurarte de que las variables de entorno necesarias estén disponibles al ejecutar “update_db.sh” como un servicio.

Comments are closed.