Проверка файла на изменение IP

Здесь важно несколько вещей. Ваши ошибки проистекают из их комбинаций:

  • Обычно вы отправляете конкретный снимок или несколько снимков, а не всю файловую систему. Это означает, что вам не нужно размонтировать наборы данных и нарушать работу ваших пользователей, и вы можете постепенно send/recvпозже.
  • Если вы не укажете снимок на источнике, вы получите автоматически сгенерированный снимок @--head--, который является состоянием вашего источника на момент отправки (, если бы вы отправили существующий снимок, который снимок заменит @--head--на стороне назначения ).
  • Комбинация send -R | recv -Fозначает полную репликацию (рекурсивную и включающую свойства в источнике, уничтожение старых вещей в месте назначения ), поэтому вам нужно решить, как расширить иерархию файловой системы :вы можете использовать либо -e, -dили отсутствие флага при получении (отсутствие флага означает слияние содержимого в новом наборе данных без сохранения имени родительского набора данных на стороне источника):

    The -d and -e options cause the file system name of the target snapshot
    to be determined by appending a portion of the sent snapshot's name to
    the specified target filesystem.  If the -d option is specified, all
    but the first element of the sent snapshot's file system path (usually
    the pool name) is used and any required intermediate file systems
    within the specified one are created. If the -e option is specified,
    then only the last element of the sent snapshot's file system name
    (i.e. the name of the source file system itself) is used as the target
    file system name.
    
  • Ваша последняя идея (одиночная отправка, полный прием )должна работать (Я протестировал ее в простой среде, и она действительно работала ), но в любом случае это было бы не то, что вы хотели.

Итак,чтобы подвести итог и применить к вашей конкретной ситуации:

  1. Сначала рекурсивно создайте текущий моментальный снимок или выберите более старый, содержащий все старые данные, которые вы хотите реплицировать):

    zfs snapshot -r zfs/staging.assets@now
    
  2. Уничтожить все старые снимки на стороне назначения, которые находятся на стороне источника (показать все снимки с помощью zfs list -Hr -o name -t snap zfs/choang.assetsили воспользоваться подсказками из сообщения об ошибке ). Либо уничтожьте целевой набор данных и создайте его заново, если он не содержит ничего важного.

  3. Отправка рекурсивно и полное получение, уничтожение всех старых наборов данных во втором наборе данных, объединение дополнительных -наборов данных в место назначения, чтобы они отражали источник:

    zfs send -R zfs/staging.assets@now | zfs recv -Fu zfs/choang.assets
    
-3
18.10.2019, 10:48
1 ответ

Если вы сейчас используете

curl icanhazip.com > ip-location1.txt

затем, добавив опцию -f, вы можете заставить curlвозвращать ошибку (и не выводить ), если это делает веб-сервер, поэтому, надеюсь, не будет необходимости выяснять, является ли вывод IP-адрес или сообщение об ошибке в формате HTML.

curl -f icanhazip.com > ip-location1.txt

Немного усложнив, вы можете добавить функцию повтора:

for i in 1 2 3   # if you want more retries, add more numbers here
do
    curl -f icanhazip.com > ip-location1.txt
    if [ $? -eq 0 ] && [ -s ip-location1.txt ]
    then
        break
    fi
    # if we get here, the current attempt failed
    sleep 5  # be nice and wait a bit before retrying instead of spamming the service
done
if [ ! -s ip-location1.txt ]
then
    echo "i cannot haz ip."
    # do whatever you want to do in case of all the retries fail
fi
0
28.01.2020, 05:19

Теги

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