¿Cómo puedo conectar la salida estándar y el error de un servicio systemd a un archivo con una fecha en la ruta?

¿Cómo puedo conectar la salida estándar y el error de un servicio systemd a un archivo con una fecha en la ruta?

Me gustaría ejecutar un proceso de servidor en systemd y agregar su salida estándar y su error a un archivo, donde la ruta del archivo tiene una fecha, como esta:

/initech/logs/tps-report-app/sales/2023/09/11/console.log

Idealmente, me gustaría que esa ruta se ejecutara automáticamente cuando cambie la fecha, pero no es el fin del mundo si no es así, ya que de todos modos reiniciamos nuestros servidores durante la noche.

Una cosa que no quiero hacer es realizar la rotación de registros tradicional, donde la salida se escribe en un archivo con una ruta fija y luego se gira a un archivo con una ruta fechada más adelante.

ElOpción de configuración de salida estándarme permite agregar resultados a un archivo usando append:path, pero no se menciona la sustitución de variables en esa cadena, así que supongo que debe arreglarse. ¿Hay alguna forma de incorporar la fecha a este camino?

Si no, ¿cuál es el mejor enfoque aquí? ¿Conectar la salida a través de una tubería con nombre o algo similar a un demonio de registro como multilog? ¿Hay algo así en el 'kit de herramientas' de systemd? ¿Envolver el proceso del servidor con un tipo de script de cargador en cadena que redirige la salida estándar y el error? ¿Algo más?

Respuesta1

Podrías, por ejemplo, rodar los troncos diariamente con logrotate. En lugar de usarlo, StandardOutputpuede indicarle a su software que envíe registros a /path/$( Something-bashy here)/console.log y, como parte de postrotatecrear la ruta, luego reinicie el servicio en cuestión.

Editar: acabo de notar que mencionas que los servidores se reinician todas las noches. Entonces su única preocupación es asegurarse de que exista la ruta del archivo de registro. En este caso incorporaría la creación de la ruta del archivo de registro en ExecStart. Algo como

ExecStart=/bin/bash -ac \
  "mkdir /my/path -p && run_app.sh"

información relacionada