Согласно документации, которую мне удалось найти, daemontools рекомендует перехватить stderr (или любой другой файловый дескриптор), перенаправив его на stdout. Если в вашем сервисе есть log/run
script, стандартный вывод вашего демона будет передан по конвейеру.
Это, очевидно, означает, что stderr и stdout смешиваются в выводе регистратора. Есть ли у кого-нибудь опыт захвата stdout и stderr отдельно в процессе, управляемом daemontools?
Для меня это похоже на вопрос оболочки: «Как мне отправить stderr и stdout по отдельности?» Предполагая синтаксис bash или Bourne-ish:
# 3 goes to wherever stdout is pointing
exec 3>&1
# send stdout of this cmd to FD 3, stderr somewhere else
eval $command 2>&1 1>&3 | sed 's/^/stderr from pipe: /'
# close FD 3
exec 3>&-