Я пишу скрипт, который будет настраивать окружение машин.У меня есть возможность поставить скрипт запуска на машины, и поэтому я пытаюсь использовать именованный канал mkfifo
в unix на моей машине «рабочей станции», которая будет прослушивать записи с этих новых машин, когда они подключатся.
Проблема в том, что я не могу контролировать, когда эти машины могут появиться в сети.В общей сложности одновременно запущено более 20 машин, и я попытался смоделировать эффекты именованного канала, записываемого несколько раз, прежде чем он сможет прочитать и получить поразительные результаты ....
Я написал два небольших тестовых сценария:
mkfifogen.sh
#!/bin/bash
mkfifo h
testing=""
sleep 10
for((i=0;i<5;i++));do
echo $I
while read line;do
testing+="$line"
done < h
done
echo "$testing"
rm -f h
и
mkfifowrite.sh
#!/bin/bash
for((i=0;i<5;i++));do
echo "this is a test $i" > h
done
Когда я запускаю mkfifogen.sh, сопровождаемый mkfifowrite.sh, выводится следующим образом
0
1
2
Затем завершается сценарий mkfifowrite.sh, а сценарий mkfifogen.sh зависает
Затем мне нужно запустить mkfifowrite.Сценарий sh еще 3 раза, и каждый раз это приводит к увеличению приращения вывода в сценарии mkfifogen.sh.При последнем запуске значение тестирования будет выводиться 4 раза, поэтому мой вывод после 4 запусков сценария mkfifowrite.sh и одного из сценариев mkfifogen.sh выглядит следующим образом:
0
1
2
3
4
this is a test 0this is a test 1this is a test 2this is a test 3this is a test 4
this is a test 0this is a test 1this is a test 2this is a test 3this is a test 4
this is a test 0this is a test 1this is a test 2this is a test 3this is a test 4
this is a test 0this is a test 1this is a test 2this is a test 3this is a test 4
Что яЯ ожидаю увидеть после запуска mkfifogen.sh и mkfifowrite.sh, когда каждый из них будет просто:
0
1
2
3
4
this is a test 0this is a test 1this is a test 2this is a test 3this is a test 4
Я немного осмотрелся в Интернете, и есть некоторые загадочные ответы на это, но я не могукажется, из них много смысла.Я чувствую, что эта ссылка может содержать мой ответ, но я не уверен https://unix.stackexchange.com/questions/68146/what-are-guarantees-for-concurrent-writes-into-a-named-pipe
TL; DR:
Как я могу гарантировать, что все записи в именованный канал, независимо от быстрогопоследовательно они выполняются, обрабатываются независимо чтением?