udev управляют для присвоения известных символьных ссылок для идентичных последовательных устройств usb

Просто сделайте функцию, делающую его для Вас. В ударе, например:

mkdircd(){ mkdir "$1" && cd "$1" ; } 

пример

mkdircd hello
8
14.12.2013, 16:11
2 ответа

Это не тестируется в комбинации:

Добавьте правило udev к IMPORT{program}="/usr/local/sbin/unique-num /run/miner-counter 0 MINER_NUM" для Ваших шахтеров.

Затем Вы могли использовать простой сценарий оболочки, что-то вроде этого несколько протестированная программа:

#!/bin/sh

if [ $# -ne 3 ]; then
    echo "Usage: $0 data-file initial var-name" >&2
    exit 1
fi

datfile="$1"
lockfile="$1.lck"
initial=$2
key="$3"

(
    flock -x 9
    num=$initial
    if [ -e "$datfile" ]; then
        read -r num < "$datfile"
    fi

    next=`expr $num + 1`;
    echo $next > "$datfile"

    echo "$key=$num"
) 9> "$lockfile"

Затем можно использовать это udev переменная среды для именования шахтеров.

4
27.01.2020, 20:12
  • 1
    Это помогло очень, спасибо. Я настроил его немного, таким образом, программа возвращает просто число (и берет просто первые два args), и затем использовал его из опции PROGRAM в моем правиле udev, вывод которого - они, раньше делал имя символьной ссылки. Я теперь имею /dev/btcminer/0 и /dev/btcminer/1 который является (немного настроенная версия), чем я был после. Спасибо за это! :-) –  Mark Embling 15.12.2013, 15:36
  • 2
    я должен также упомянуть, что должен был изменить хижину на #!/bin/bash также. По некоторым причинам, sh требуемый была синтаксическая ошибка ("неожиданное слово"). Не знайте почему или что sh находится под Ubuntu, но это решило ее. –  Mark Embling 15.12.2013, 15:40
  • 3
    @MarkEmbling, Оказывается, что SUS только требует, чтобы числа до 9 поддерживались. Таким образом, если Вы изменяете те два 16s к 9s, затем это будет работать в /bin/sh. По крайней мере, с тире. (/bin/sh в этой системе удар по некоторым причинам), –  derobert 15.12.2013, 19:28
  • 4
    Это прекрасно, это теперь работает отлично с/bin/sh. Еще раз спасибо за это я изучил много в последние дни. Никогда не касался udev вообще прежде вчера, :-) –  Mark Embling 15.12.2013, 20:43

Вопрос уже имеет принятый ответ, но я решил поделиться своим вариантом решения , предусмотренном derobert .

Мои требования были немного по-разному - в дополнение к предоставлению номеров «увеличения» индекса на новые устройства - я хотел повторные номера индекса, которые были отданы устройствами, которые были удалены из системы.

Правило UDEV для настройки переменной среды будет выглядеть что-то вроде этого:

IMPORT{program}="/usr/local/sbin/unique-num /dev miner MINER_NUM"

в моем решении, я не использую файл для отслеживания индекса, я просто цикл на основе существующих И найдите первый доступный индекс:

/ USR / LOCAL / SBIN / Unique-Num Сценарий:

#!/bin/bash

if [ $# -ne 3 ]; then
    echo "Usage: $0 location prefix var-name" >&2
    exit 1
fi

location="$1"
prefix="$2"
key="$3"

needindex=1
index=0

while [ $needindex -eq 1 ]
do
        if [ ! -e $location/$prefix$index ]; then
                needindex=0
                echo "$key=$index"
        else
                (( index++ ))
        fi
done

Это будет, конечно, распечатать имя var с первым доступным индексом, например, если Эти уже существуют:

miner0
miner1
miner2

, а затем Miner1 отсоединяется от системы - мы остались с:

miner0
miner2

Запуск скрипта вернется:

MINER_NUM=1

... как Это сейчас первый доступный индекс .

2
27.01.2020, 20:12

Теги

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