У меня есть файловая система, которая используется несколькими компьютерами. Я не могу открыть сетевые соединения между этими компьютерами, поэтому я написал программу для связи через файлы. У меня есть сервер, который проверяет папку на наличие файлов инструкций, он читает, выполняет и записывает выходной файл, а затем создает файл сигналов, чтобы указать, что файл готов.
для проверки файла с while
l oop
while [[ ! -e $READY_FILE ]]
do sleep 1
done
do something
Сервер сразу получает и обрабатывает файл и создает файл сигнала, но я вижу странная задержка на стороне клиента.
, когда сервер и клиент работают на одной машине, задержка очень мала. Когда я запускаю клиент на отдельном компьютере, задержка составляет около 30 секунд.
time bash client.sh -f commands.txt
done
real 0m31.945s
user 0m0.048s
sys 0m0.314s
Это воспроизводимо +/- 2 секунды.
Я могу устранить проблему, заставив клиентский компьютер что-нибудь сделать с рабочим каталогом.
time bash client.sh -f commands.txt & sleep 5; ls $wd >/dev/null
real 0m5.120s
user 0m0.014s
sys 0m0.083s
time bash client.sh -f commands.txt & sleep 3.5; ls $wd >/dev/null
real 0m3.749s
user 0m0.011s
sys 0m0.055s
Я могу исправить это в программе, изменив while
l oop на
while [[ ! -e $READY_FILE ]]
do ls $wd >/dev/null
sleep 1
done
Теперь я получаю
time bash client.sh -f commands.txt
real 0m1.075s
user 0m0.004s
sys 0m0.056s
Мой вопрос: почему существует 30? вторая задержка для теста [[ -e $READY_FILE ]]
для обнаружения файла?