Как задать паузу перед выполнением команды в sh или csh?

hoha32

Хочется usbd заставить нормально реагировать на флешки.

mirt1971

sleep 1

hoha32

о! пасиба

mirt1971

Кстати для монтирования на лету сейчас модно использовать supermount.

hoha32

для БСД порт есть?
кстати, у меня получилось нечто "use with caution" - перед выдёргиванием надо размонтировать. если после - пипец

mirt1971

У тебя бсд? Тогда нет. Это исключительно для Linux.

hoha32

Да, БСД. Жаль тогда.

sergey_m

Хочется usbd заставить нормально реагировать на флешки.
Пауза всё равно будет race condition. Нужно делать while (условие); do sleep 1; done;.
Что конкретно ты хочешь сделать?

garikus

Да, кстати, про монтирование usbflash в FreeBSD.
Вот, как сделано у меня:
tmp-mountflash:


#!/bin/sh
: ${USBFLASH_CONFIG="/home/aix/etc/usbflash.conf"}
if [ -f "$USBFLASH_CONFIG" -a -r "$USBFLASH_CONFIG" ]; then
. $USBFLASH_CONFIG
fi
: ${USBFLASH_OWNER_USER:=0}
: ${USBFLASH_OWNER_GROUP:=0}
: ${USBFLASH_ROOT:=/mnt/usbflash}
sleep 2
sym=/mnt/flash
mkdir -p ${USBFLASH_ROOT}
rmdir ${USBFLASH_ROOT}/* > /dev/null 2> /dev/null
for i in `ls /dev/da* | grep s`
do
j=`basename $i`
mkdir -p ${USBFLASH_ROOT}/$j
chown ${USBFLASH_OWNER_USER}:${USBFLASH_OWNER_GROUP} ${USBFLASH_ROOT}/$j
chmod 700 ${USBFLASH_ROOT}/$j
mount_msdosfs -o sync -L ru_RU.KOI8-R -D CP866 -m 600 -M 700 $i ${USBFLASH_R
OOT}/$j > /dev/null 2> /dev/null
rmdir ${USBFLASH_ROOT}/$j > /dev/null 2> /dev/null
done


tmp-umountflash:


#!/bin/sh
: ${USBFLASH_CONFIG=/home/aix/etc/usbflash.conf}
if [ -f "$USBFLASH_CONFIG" -a -r "$USBFLASH_CONFIG" ]; then
. $USBFLASH_CONFIG
fi
: ${USBFLASH_ROOT:=/mnt/usbflash}
sleep 3
echo Detach `date` $1 >> /tmp/usbflash.log
if [ ! -d ${USBFLASH_ROOT} ]
then
exit
fi
for i in `ls ${USBFLASH_ROOT}`
do
j=`mount | cut -f 1 -d" " | grep $i`
umount $j
done


usbflash.conf:


USBFLASH_OWNER_USER=sasha
USBFLASH_OWNER_GROUP=dataaccess
USBFLASH_ROOT=/mnt/usbflash


/etc/usbd.conf:


...
device "USB flash"
devname "umass[0-9]+"
attach "/home/aix/bin/tmp-mountflash ${DEVNAME}"
# detach "/home/aix/bin/tmp-umountflash ${DEVNAME}"
...


Я знаю, что это не очень удачное решение
Сделать umount нельзя после отключиения flash, как я понимаю, по этой причине?

hoha32

Уже сделал Когда вставляю флешку, срабатывание скрипта идёт на появление устройства umass0, а da0s1 появляется буквально на полсекунды позже. Небольшой задержки даже в секунду перед срабатыванием mount_msdosfs вполне хватило.

hoha32

Вай, столько всего Логить-то зачем?
Угу, kernel panic тот ещё получается

sergey_m

> Сделать umount нельзя после отключиения flash, как я понимаю, по этой причине?
Да. Alfred Perlstein работает над autofs, которая должна решить эту проблему. Когда он закончит - это хз.

sergey_m

Уже сделал Когда вставляю флешку, срабатывание скрипта идёт на появление устройства umass0, а da0s1 появляется буквально на полсекунды позже. Небольшой задержки даже в секунду перед срабатыванием mount_msdosfs вполне хватило.
Всё равно лучше сделать с проверкой, чем тупо вставить задержку. Если ты видишь (или тебе подсказали) правильное решение задачи, то не нужно оставлять её в недорешенном состоянии. Такой подход важен даже в мелочах.

sergey_m



: ${USBFLASH_CONFIG="/home/aix/etc/usbflash.conf"}
if [ -f "$USBFLASH_CONFIG" -a -r "$USBFLASH_CONFIG" ]; then
. $USBFLASH_CONFIG
fi


Ты отдаешь себе отчет что это способ превратиться из aix в root?

hoha32

Решения бывают разные. Степень навороченности решения определяется её целесообразностью. Для того, чтобы раз в неделю вставить флешку в комп, моего решения вполне достаточно.
ЗЫ: чего-то я не понял хитрости работы umount Всё дело в -o sync?

garikus

э-э, нет
ты имеешь в виду это?


: ${USBFLASH_OWNER_USER:=0}
: ${USBFLASH_OWNER_GROUP:=0}


если да, то с этим у меня всё в порядке.
Если нет, то я не понимаю, почему.
See /usr/libexec/locate.updatedb, line 36.

sergey_m

Нет. Я имею в виду что malicious user получив каким-то образом твой шелл может вставить свои команды в /home/aix/etc/usbflash.conf, и просто дождаться когда ты вставишь флешку. Команды исполнятся от пользователя root.

garikus

понятно.
у меня-то всё в порядке, но мне не следовало постить сюда такие настройки без упоминания о том, что usbflash.conf должен быть доступен для записи только суперпользователю

sergey_m

у меня-то всё в порядке, но мне не следовало постить сюда такие настройки без упоминания о том, что usbflash.conf должен быть доступен для записи только суперпользователю
Не совсем очевидно в свете того, что лежит в домашнем каталоге пользователя.
Оставить комментарий
Имя или ник:
Комментарий: