bash 30 секундная задержка при проверке наличия файла - PullRequest
0 голосов
/ 31 марта 2020

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

для проверки файла с 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 ]] для обнаружения файла?

...