2017-02-22 15 views
0

У меня есть приложение на изолированной машине. Например, он записывает журналы в /var/log/app/log.txt. Тем не менее, я хочу, чтобы он записывал журналы для демона journald. Однако я не могу изменить способ запуска приложения, поскольку он инкапсулирован.Пересылка журналов из файла в журнал

Я имею в виду, я не могу сделать что-л, как app | systemd-cat

1) Правильно ли я, что все услуги начали с Systemd журналов записи в journald?

2) Если да, будут ли дети процесса, запущенные системойdd, также записывать журналы в journald?

3) Есть ли способ сообщить журналисту о регистрации журналов из определенного файла?

4) Если нет, существуют ли какие-либо обходные пути?

+0

Хорошо, я выяснил ответы на первые два вопроса 1) да 2) есть –

ответ

0

предупреждение: это не тестируется

Вы могли бы установить привязку /dev/stdout в лог-файл в ExecStartPre

Примере:

ExecStartPre=/use/sbin/mount --bind /dev/stdout  /var/log/app/log.txt 

Или мягкая ссылка /dev/stdout в логе-файл в ExecStartPre

Пример:

ExecStartPre=/use/bin/ln -s /dev/stdout  /var/log/app/log.txt 
0

4) Я могу только попытаться помочь с обходного:

MY_LOG_FILE=/var/log/app/log.txt 

# Create a FIFO PIPE 
PIPE=/tmp/my_fifo_pipe 
mkfifo $PIPE 
MY_IDENTIFIER="my_app_name"  # just a label for later searching in journalctl 

# Start logging to journal 
systemd-cat -t $MY_IDENTIFIER -p info < $PIPE & 
exec 3>$PIPE 

tail -f $MY_LOG_FILE > $PIPE & 

exec 3>&- #closing file descriptor 3 closes the fifo 

Это основная идея, теперь вы должны думать о таймингах, когда это необходимо, чтобы это началось и когда будет остановился.