Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

441
Views
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 answers
Answer question

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 Report

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 Report

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 Report

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 Report

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!