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 redirigir el registro de printf hacia un archivo específico para un proceso de demonio en Linux?

Tengo un proceso demonio de ejemplo. Tengo un archivo de servicio que activará el archivo de lanzamiento del proceso principal. Cuando el sistema arranca, en función de este archivo, se creará el archivo /var/log/sample.out y el archivo /var/log/sample.err para el registro.

Necesito redirigir los registros de printf a este archivo sample.out.
¿Hay alguna forma de hacer esto?

Agregué la siguiente declaración para hacer lo mismo, pero no muestra ningún registro en /var/log/sample.out o /var/log/sample.err.

${binary} > ${logs}.out 2> ${logs}.err

sample.c

#include<stdio.h>

int main()
{
    printf("Demon starteed \n");
}

sample.service

[Unit]
Description="sample service"

[Service]
ExecStart=/usr/bin/sample.service.start

[Install]
WantedBy=multi-user.target

sample.service.start

service=sample
binary=/usr/bin/${service}
logs=/var/log/${service}
${binary} > ${logs}.out 2> ${logs}.err

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para redirigir el registro de printf al archivo sample.out, puedes modificar la declaración de printf en el archivo sample.c para que escriba directamente en el archivo usando las funciones fopen y fprintf. Aquí tienes un ejemplo de código:

    #include <stdio.h>
    
    int main()
    {
        FILE *fp;
        fp = fopen("/var/log/sample.out", "w"); // O "a" para agregar al archivo
        fprintf(fp, "Demonio iniciado\n");
        fclose(fp);
    }
    

    Alternativamente, puedes modificar el archivo sample.service.start para redireccionar la salida del binario sample usando el comando exec en lugar de simplemente ejecutar el binario. Aquí tienes una versión actualizada del archivo:

    service=sample
    binary=/usr/bin/${service}
    logs=/var/log/${service}
    
    exec ${binary} > ${logs}.out 2> ${logs}.err
    

    Esto asegurará que cualquier salida del binario sample (incluyendo las declaraciones printf) se redirija a los respectivos archivos de registro especificados en la variable logs.</stdio.h>

Comments are closed.