NMT-200 ЧаВо

Не совсем понятное мне поведение C-200 на августовской прошивке, в плане иногда хаотичного подъема дисков (без указания явной причины в dmesg), при которых разделы на SATA-дисках могут подмонтироваться позже старта Transmission (что чревато долгой перепроверкой файлов по контрольным суммам), вынудило к проведению некоторых исследований и написанию скрипта.
Во-первых отследил последовательность подъема, при которой главным домкратом демона Transmision явно был определен \\PCH-C200\share\Apps\Transmission\daemon.sh
Затем, путем поиска в интернете на предмет «программирование bash if while» за несколько минут нашел некий древний мануал вида «забытые навыки индейцев майя или колдовство на bash», после которого и родил сей некрасивый, но работающий блок кода по проверке существования каталогов, прописав его в секцию start() в daemon.sh:

start()
{
### start my code
    t=0
    while [  ! -d /SATA_DISK_A3/Download/Movie -o ! -d /SATA_DISK_B4/Download/Movie -o ! -d /Tor_Ext1/Download/Movie ] && [ $t -le 10 ]; do
      t=$(( $t + 1 ))
      sleep 5
    done
 
    if [ $t -ge 10 ]; then
      exit 255
    fi
### end my code

Логика по-русски: пока не (!) существуют каталоги (-d) 1 или (-o) 2 или (-o) 3, расположенные на разных носителях, и (&&) пока счетчик попыток (t) менее или равен (-le) 10, бить баклуши (sleep) по 5 секунд и приплюсовывать счетчик. А потом, если цикл кончился (done), то если (if) это счетчик кончился, стал равен или более (-ge) 10, то есть за 10 попыток по 5 секунд каталоги не смонтировались, выходить из скрипта (exit) с кодом ошибки 255.

Предложения по усовершенствованию данного некрасивого кода — в студию!

1 комментарий к этой записи

  • MEDBEDb

    В Linux не силен тем более в программирование, но постоянные перепроверки раздаваемых файлов надоело, решил попробовать как-то проконтролировать процесс запуска Transmission. Используя данный контроль совсем проблему не решил т.к. daemon.sh запускается раньше завершения монтирования всех дисков, а качают все разные директории. В результате проб и ошибок получил положительный результат. В общем что пришлось сделать:
    1. Отредактировать /share/Apps/Transmission/daemon.sh, в секцию start() вставил текст у меня он стоит после:

    chmod 777 /tmp
    chmod 777 /share/Apps/Transmission/ -R
    chmod +x /share/Apps/Transmission /bin/transmission-daemon

    until [ -d /media/Video ] && [ -d /download ] ; do
    n=$(( $n + 1 )); sleep 5
    if [ $n -ge 3 ] ; then exit 255 ; fi
    done

    где: /download — раздел диска с меткой «download» имеющий симлинк: ln -s /download/ /share/Download
    /media/Video — место где хранится все фильмы, от туда я тоже раздаю

    2. Создал файл в /share/Apps/Transmission/restart.sh его содержимое:

    #!/bin/sh
    n=0;nn=12 # Проверка существования директорий для скачивания
    until [ -d /media/Video ] && [ -d /download ] && [ $n -le $nn ]; do
    n=$(( $n + 1 )); sleep 5
    if [ $n -ge $nn ] ; then
    echo Error Transmission start `date`>> /share/errors
    exit 255
    fi
    done
    if [ -d /media/Video ] && [ -d /download ] ; then
    # echo Transmission start popitka № $n >> /share/Apps/LinuxUtils/log/run
    /share/Apps/Transmission/daemon.sh restart # Transmission
    fi

    где: nn=12 количество попыток проверки 12*5сек=1мин, мне минуты достаточно в среднем со 2-4 попыток запускается но было и с 10-ой, кому интересно с какой у него запустится раскоментируйте строку 3 строку снизу.
    остальное и так вроде понятно.

    3. Редактируем файл /share/start_app.sh, в конец файла пере строкой «exit 0″ вставляем:
    #restart transmission
    /share/Apps/Transmission/restart.sh

    вот собственно и все, у меня работает прекрасно, если есть у кого замечания и пожелания пишите

Предыдущая запись
«
Купить мед справку для гибдд для получения справки в гибдд вы пройдете мед.
2010–2017 © NMT-200 ЧаВо