Перенаправление нескольких стандартных выводов в один файл - PullRequest
3 голосов
/ 26 апреля 2010

У меня есть программа, работающая на нескольких машинах с NFS, и я хочу записать все их результаты в один файл. Могу ли я просто запустить ./my_program >> filename на каждой машине или есть проблема с параллелизмом, о которой я должен знать? Так как я только добавляю, я не думаю, что это будет проблемой, но я просто пытаюсь убедиться.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

Это может сработать, но да, у вас будут проблемы с параллелизмом, и файл журнала будет в основном неразборчивым.

Я бы порекомендовал создать файл журнала для каждой машины, а затем периодически (скажем, по ночам) объединять файлы с именем машины в качестве имени файла:

for i in "/path/to/logfiles/*"; do
    echo "Machine: $i";
    cat $i;
done > filename.log

Думаю, это должно дать вам некоторые идеи.

2 голосов
/ 29 сентября 2010

Протокол NFS не поддерживает атомарные записи добавления, поэтому записи добавления никогда не являются атомарными в NFS для любой платформы.Файлы будут повреждены, если вы попытаетесь.

При добавлении к файлам из нескольких потоков или процессов рукописный ввод в этот файл является атомарным при условии, что файл был открыт в режиме добавления, записанная в него строка делаетне превышает размер блока файловой системы и файловая система является локальной.Что в NFS не так.

Существует обходной путь, хотя я бы не знал, как это сделать из сценария оболочки.Техника называется непротиворечивость кэша

...