В настоящее время я пытаюсь заставить script правильно записать вывод из других запущенных команд в файл журнала. script будет записывать собственные сообщения в файл журнала с помощью эха, и есть способ, с помощью которого я могу передать строки из другой программы.
Основная проблема заключается в том, что программа, которая производит вывод, запускается в фоновом режиме, поэтому моя функция, которая выполняет чтение, может писать в файл журнала. Это может быть проблема? Эхо всегда записывает только одну строку, поэтому не должно быть трудно обеспечить атомарность. Однако я посмотрел в google, и я не нашел способа убедиться, что он на самом деле является атомарным.
Вот текущий script:
LOG_FILE=/path/to/logfile
write_log() {
echo "$(date +%Y%m%d%H%M%S);$1" >> ${LOG_FILE}
}
write_output() {
while read data; do
write_log "Message from SUB process: [ $data ]"
done
}
write_log "Script started"
# do some stuff
call_complicated_program 2>&1 | write_output &
SUB_PID=$!
#do some more stuff
write_log "Script exiting"
wait $SUB_PID
Как вы можете видеть, script может писать как самостоятельно, так и из-за перенаправленного вывода. Может ли это вызвать хавок в файле?