Будет ли запуск yum update при запуске createrepo вызывать состояние гонки?

Предположим, что вы хотите получить список ключей, соответствующих определенному значению, и хотите сохранить этот список в массиве:

#!/bin/bash

declare -A hash
hash=(
    [k1]="hello world"
    [k2]="hello there"
    [k3]="hello world"
    [k4]=bumblebees
)

string="hello world"

keys=()
for key in "${!hash[@]}"; do
    if [[ ${hash[$key]} == "$string" ]]; then
        keys+=( "$key" )
    fi
done

printf 'Keys with value "%s":\n' "$string"
printf '\t%s\n' "${keys[@]}"

Это просматривает список ключей и проверяет значение, соответствующее каждому ключу, на соответствие строке, которую мы ищем. Если есть совпадение, мы сохраняем ключ в массиве keys.

В конце выводятся найденные ключи.

Вывод этого скрипта будет

Keys with value "hello world":
        k1
        k3
1
01.03.2021, 18:38
1 ответ

Нет, это не состояние гонки, а ошибка на стороне клиента из-за несогласованности данных.

В репозитории есть файл со списком элементов/пакетов, содержащихся в нем. Этот файл создается/обновляется в конце создания/обновления репозитория.

Если клиент открывает репозиторий и читает файл содержимого во время записи, его yumвылетит с ошибкой.

Если файл не записывается, но вы меняете содержимое репозитория, данные могут быть несогласованными. Клиент yumвыйдет из строя, потому что ссылка на файл в файле содержимого недоступна для чтения.

Если вы хотите минимизировать проблемы, вы можете работать с копией репозитория (в зависимости от его размера );

# rm -fr newrepo oldrepo
# rsync -ua repo/ newrepo/
# cd newrepo
(then update this copy or the repository)
# cd..
# mv repo oldrepo; mv newrepo repo
# rm -fr oldrepo

Это сократит время переключения, хотя и не позволит полностью избежать ошибок клиента.

0
18.03.2021, 22:28

Теги

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