Используя inotifywait наряду с энергией

@derobert корректен.

Это unaccessable, потому что по умолчанию Вы не можете получить доступ к веб-странице управления от интерфейса глобальной сети. Только доверенные устройства (в LAN) должны смочь получить доступ к интерфейсу управления.

14
09.03.2015, 02:17
1 ответ

Редакторы могут использовать несколько стратегий для сохранения файла. Два основных варианта - перезаписать существующий файл или записать в новый файл и переместить его на место. Запись в новый файл и перемещение его на место имеет приятное свойство, заключающееся в том, что в любой момент чтение из файла дает вам полную версию файла (в одно мгновение - старую, в следующее мгновение - новую). Если файл перезаписывается на месте, есть время, в течение которого он остается неполным, что проблематично, если какая-то другая программа обращается к нему сразу же или если система дает сбой.

Nano, по-видимому, перезаписывает существующий файл.Ваш сценарий определяет момент окончания записи (событие close_write ) и запускает в этот момент rsync . Обратите внимание, что rsync может получить неполную версию файла, если вы сохраните дважды в быстрой последовательности, прежде чем rsync завершит свою работу с первого сохранения.

Vim, с другой стороны, использует стратегию записи-затем-перемещения - что-то похожее на

echo 'new content' >somefile.new
mv -f somefile.new somefile

. Что происходит со старой версией файла, так это то, что она удаляется в точке, куда перемещается новая версия. на место. На этом этапе команда inotifywait возвращается, потому что файл, который ей велено наблюдать, больше не существует. (Новый somefile - это другой файл с тем же именем.) Если бы Vim был настроен на создание файла резервной копии, то произошло бы что-то вроде

echo 'new content' >somefile.new
ln somefile somefile.old
mv -f somefile.new somefile

и inotifywait теперь смотреть резервную копию.

Для получения дополнительной информации о стратегиях сохранения файлов см. Как можно выполнять оперативное обновление во время работы программы? и Разрешения и сохранение файлов

Vim можно указать использовать стратегия перезаписи: отключите параметр backupcopy (: установить nobackupcopy ). Как указано выше, это рискованно.

Чтобы обработать обе стратегии сохранения, просмотрите каталог и отфильтруйте события close_write и move_to для somefile .

inotifywait -m -e close_write,moved_to --format %e/%f . |
while IFS=/ read -r events file; do
  if [ "$file" = "somefile" ]; then
    …
  fi
done
14
27.01.2020, 19:51

Теги

Похожие вопросы