3

У меня есть скрипт на Linux, который я редактирую под Windows (через Samba), который начинается со строки # shebang !/bin/bash. Даже если:

  • Я заканчиваю редактирование, сохраняю и закрываю файл в редакторе
  • убедитесь, что файл не открыт в другом месте
  • убедитесь, что файл сохранен с окончанием строки Unix
  • cat файл под Linux и убедитесь, что редактирование присутствует
  • stat файл под Linux и убедитесь, что у него есть метка времени после редактирования

Я все еще получаю сообщение об ошибке /bin/bash: bad interpreter: Text file busy когда я пытаюсь его выполнить, какое-то время (около минуты или двух). Зачем??

ПРИМЕЧАНИЕ: файл не кэшируется на клиенте. Файл виден на сервере cat . Также возможно запустить /bin/bash на нем. Только когда используется строка shebang, то есть когда исполняется сам файл , возникает вышеуказанная ошибка.

1 ответ1

1

Samba поддерживает так называемую оппортунистическую блокировку.

Когда клиент хочет прочитать файл, и никто не пишет файл, Samba предоставит клиенту оплок для чтения. Это позволяет клиенту кэшировать данные, не считывая их снова и снова с сервера. Если другой клиент хочет выполнить запись в файл, Samba отправит клиенту запрос на "прерывание операции блокировки", чтобы он знал, что больше не может кэшироваться.

Точно так же, когда клиент хочет записать файл, и никто другой не обращается к нему, Samba предоставит клиенту операционную блокировку записи. Это позволяет ему буферизовать записи, кэшировать чтения и предполагать, что он может читать свои собственные записи обратно без необходимости беспокоить сервер. Если другой клиент захочет прочитать или записать файл, Samba отправит клиенту запрос на "прерывание операции блокировки" с принудительной блокировкой, заставив его сбросить все буферизованные записи и остановить буферизацию и кэширование.

То, что происходит, это то, что Windows-машина удерживает блокировку записи. И поскольку вы получаете доступ к файлу с хоста (а не через Samba), у Samba нет шансов попросить клиента прервать оплок. В результате у сервера нет возможности узнать, является ли содержимое файла пригодным для использования или реальное содержимое все еще известно только клиенту. Пока не будет снята блокировка записи, файл не может быть выполнен.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .