Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

443
Vistas
Cómo redirigir la salida del servicio systemd a un archivo

Estoy tratando de redirigir la salida de un servicio systemd a un archivo, pero parece que no funciona:

 [Unit] Description=customprocess After=network.target [Service] Type=forking ExecStart=/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server StandardOutput=/var/log1.log StandardError=/var/log2.log Restart=always [Install] WantedBy=multi-user.target

Por favor, corrija mi enfoque.

over 4 years ago · Santiago Trujillo
8 Respuestas
Responde la pregunta

0

Posiblemente obtenga este error:

 Failed to parse output specifier, ignoring: /var/log1.log

Desde la página del comando man systemd.exec(5) :

StandardOutput=

Controla dónde se conecta el descriptor de archivo 1 (STDOUT) de los procesos ejecutados. Toma uno de inherit , null , tty , journal , syslog , kmsg , journal+console , syslog+console , kmsg+console o socket .

La página del comando man systemd.exec(5) explica otras opciones relacionadas con el registro. Consulte también las systemd.service(5) y systemd.unit(5) .

O tal vez puedas probar cosas como esta (todo en una sola línea):

 ExecStart=/bin/sh -c '/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server 2>&1 > /var/log.log'
over 4 years ago · Santiago Trujillo Denunciar

0

Supongamos que los registros ya están colocados en stdout/stderr y tienen el registro de la unidad systemd en /var/log/syslog

 journalctl -u unitxxx.service Jun 30 13:51:46 host unitxxx[1437]: time="2018-06-30T11:51:46Z" level=info msg="127.0.0.1 Jun 30 15:02:15 host unitxxx[1437]: time="2018-06-30T13:02:15Z" level=info msg="127.0.0.1 Jun 30 15:33:02 host unitxxx[1437]: time="2018-06-30T13:33:02Z" level=info msg="127.0.0.1 Jun 30 15:56:31 host unitxxx[1437]: time="2018-06-30T13:56:31Z" level=info msg="127.0.0.1

Config rsyslog (Servicio de registro del sistema)

 # Create directory for log file mkdir /var/log/unitxxx # Then add config file /etc/rsyslog.d/unitxxx.conf if $programname == 'unitxxx' then /var/log/unitxxx/unitxxx.log & stop

Reiniciar rsyslog

 systemctl restart rsyslog.service
over 4 years ago · Santiago Trujillo Denunciar

0

Creo que hay una manera más elegante de resolver el problema: envíe el stdout/stderr a syslog con un identificador e indique a su administrador de syslog que divida su salida por nombre de programa.

Use las siguientes propiedades en su archivo de unidad de servicio systemd:

 StandardOutput=syslog StandardError=syslog SyslogIdentifier=<your program identifier> # without any quote

Luego, asumiendo que su distribución usa rsyslog para administrar syslogs, cree un archivo en /etc/rsyslog.d/<new_file>.conf con el siguiente contenido:

 if $programname == '<your program identifier>' then /path/to/log/file.log & stop

Ahora haga que el archivo de registro sea escribible por syslog:

 # ls -alth /var/log/syslog -rw-r----- 1 syslog adm 439K Mar 5 19:35 /var/log/syslog # chown syslog:adm /path/to/log/file.log

¡Reinicie rsyslog ( sudo systemctl restart rsyslog ) y disfrute! Su programa stdout/stderr seguirá estando disponible a través de journalctl ( sudo journalctl -u <your program identifier> ) pero también estarán disponibles en su archivo de elección.

Fuente a través de archive.org

over 4 years ago · Santiago Trujillo Denunciar

0

Si por alguna razón no puede usar rsyslog, esto funcionará: ExecStart=/bin/bash -ce "exec /usr/local/bin/binary1 agent -config-dir /etc/sample.d/server >> /var/log/agent.log 2>&1"

over 4 years ago · Santiago Trujillo Denunciar

0

Si tiene una distribución más nueva con un systemd más nuevo ( systemd versión 236 o más reciente ), puede establecer los valores de StandardOutput o StandardError en file:YOUR_ABSPATH_FILENAME .


Larga historia:

En las versiones más nuevas de systemd , hay una opción relativamente nueva ( la solicitud de github es de 2016 ish y la mejora se fusionó/cerrado 2017 ish ) donde puede establecer los valores de StandardOutput o StandardError en file:YOUR_ABSPATH_FILENAME . La opción file:path está documentada en la página man más reciente systemd.exec .

Esta nueva función es relativamente nueva y, por lo tanto, no está disponible para distribuciones más antiguas como centos-7 (o cualquier centos anterior).

over 4 years ago · Santiago Trujillo Denunciar

0

Sugeriría agregar el archivo stdout y stderr en el propio archivo de service systemd.

Referencia: https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

Como lo has configurado no debería gustarte:

 StandardOutput=/home/user/log1.log StandardError=/home/user/log2.log

Debería ser:

 StandardOutput=file:/home/user/log1.log StandardError=file:/home/user/log2.log

Esto funciona cuando no desea reiniciar el servicio una y otra vez .

Esto creará un nuevo archivo y no se agregará al archivo existente.

Utilice en su lugar:

 StandardOutput=append:/home/user/log1.log StandardError=append:/home/user/log2.log

NOTA: Asegúrese de crear el directorio ya. Supongo que no es compatible con la creación de un directorio.

over 4 years ago · Santiago Trujillo Denunciar

0

Estamos usando Centos7, aplicación de arranque de primavera con systemd. Estaba ejecutando Java como se muestra a continuación. y establecer StandardOutput en el archivo no funcionaba para mí.

 ExecStart=/bin/java -jar xxx.jar -Xmx512-Xms32M

A continuación, la solución alternativa funciona sin configurar StandardOutput. ejecutando Java a través de sh como se muestra a continuación.

 ExecStart=/bin/sh -c 'exec /bin/java -jar xxx.jar -Xmx512M -Xms32M >> /data/logs/xxx.log 2>&1'

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Respuesta corta:

 StandardOutput=file:/var/log1.log StandardError=file:/var/log2.log

Si no desea que los archivos se borren cada vez que se ejecuta el servicio, use append en su lugar:

 StandardOutput=append:/var/log1.log StandardError=append:/var/log2.log
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda