как использовать syslog, чтобы избежать искажения файла журнала, когда несколько процессов пытаются записать данные в один и тот же файл журнала?

как использовать syslog, чтобы избежать искажения файла журнала, когда несколько процессов пытаются записать данные в один и тот же файл журнала?

Я хотел узнать об использовании syslog, когда несколько процессов пытаются записать данные в один и тот же файл журнала, например

for i in $var
do
some process >> logfile &
done
wait

решение1

Ты можешь сделать

some process | logger &

для запуска процессов и направления их вывода в syslog. Обратите внимание, что по умолчанию будет «user», а по умолчанию — «notice». Вы можете изменить их с помощью опции -p.

Причина, по которой это работает без проблем, заключается в том, что процессы не пишут напрямую в целевой файл. Они отправляют свои сообщения демону syslog, который управляет записью в соответствующий файл(ы). Насколько я понимаю, атомарность будет основана на строках, то есть каждая строка вывода процесса будет попадать в syslog без помех, но многострочные сообщения могут содержать строки из других процессов.

Связанный контент