Не совсем понятное мне поведение C-200 на августовской прошивке, в плане иногда хаотичного подъема дисков (без указания явной причины в dmesg), при которых разделы на SATA-дисках могут подмонтироваться позже старта Transmission (что чревато долгой перепроверкой файлов по контрольным суммам), вынудило к проведению некоторых исследований и написанию скрипта.
Во-первых отследил последовательность подъема, при которой главным домкратом демона Transmision явно был определен \\PCH-C200\share\Apps\Transmission\daemon.sh
Затем, путем поиска в интернете на предмет «программирование bash if while» за несколько минут нашел некий древний мануал вида «забытые навыки индейцев майя или колдовство на bash», после которого и родил сей некрасивый, но работающий блок кода по проверке существования каталогов, прописав его в секцию start() в daemon.sh:
{
### 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.
Предложения по усовершенствованию данного некрасивого кода — в студию!
13 ноября 2010 г. в 11:24
В 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
вот собственно и все, у меня работает прекрасно, если есть у кого замечания и пожелания пишите