puedo empujarsalida estándar / stderrdesde elsilbidocomando para rsyslog así:
ping www.superuser.com 2>&1 | logger -p user.info
En mi sistema, la salida "en vivo" se puede ver con un simple archivo tail -f /var/log/messages
. Va allí debido a la línea correspondiente en mi /etc/rsyslog.config
:
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
Sin embargo, lo mismo no funciona para mi programa personalizado:
myprogram 2>&1 | logger -p user.info
El binario myprogram no regresa/sale inmediatamente después de la llamada (se ejecutará durante algún tiempo) y de vez en cuando imprime mensajes (usando printf) en la consola. Se comporta de esta manera si no canalizo su salida al registrador. Corríjame si me equivoco, pero este comportamiento es similar alsilbidocomando (al menos cuando se alcanza el destino).
¿Por qué entonces no veo el resultado de myprogram en /var/log/messages
? ¿Podría la salida almacenarse en búfer de alguna manera y simplemente aún no llega al registrador? ¿Podría ser algo más sobre la rsyslog.conf
línea de configuración?
Respuesta1
Resulta que fue el resultado del myprogram
almacenamiento en búfer. Usando los trucos mencionadosen esta preguntaSe me ocurrió una solución rápida:
script -q -c "myprogram" | logger -p user.info