Как обнаружить, если точка монтирования существует из init.d сценария?

Вот статья о выполнении ASP.NET MVC 3 веб-приложения на моно.

4
задан 3 November 2013 в 12:17
2 ответа

Сценарии init запускаются в порядке, определенном номерами S ##. Более новые версии Unix (по крайней мере, в Linux) запускают одни и те же номера ## параллельно (хотя вы можете отключить эту функцию ...) Все, что вам нужно сделать, это использовать ## после сети и fsmount номер. Тогда должно работать. Однако, если fsmount запускается в фоновом режиме, проще всего проверить файлы на смонтированном диске. Примерно так:

while ! test -f /mnt/over-there/this/file/here
do
    sleep 1
done

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

Чтобы избежать потенциальной проблемы, связанной с созданием кем-то тестируемого файла на локальном компьютере, вы можете вместо этого использовать командную строку точка монтирования как в:

while ! mountpoint -q /mnt/over-there
do
    sleep 1
done

(Из комментария ниже.) -q делает команду тихой.

--- Обновление: тайм-аут после 30 попыток

В сценарии оболочки вы также можете подсчитывать и проверять числа:

count=0
while ! test -f /mnt/over-there/this/file/here
do
    sleep 1
    count=`expr $count + 1`
    if test $count -eq 30
    then
        echo "timed out!"
        exit 1
    fi
done

Это остановится, если счет достигнет 30 (30 секунд сна плюс время, необходимое для проверьте, доступен ли файл или нет), после чего выводится сообщение об ошибке «истекло время ожидания!».

--- Обновление: в случае перехода на systemd

При использовании systemd Раздел модуля поддерживает:

ConditionPathIsMountPoint=/mnt/over-there

, который выполняет то же самое, что и приведенный выше сценарий, без тайм-аута. Этот оператор предотвращает запуск вашей команды до тех пор, пока не будет установлено монтирование.

count=0
while ! test -f /mnt/over-there/this/file/here
do
    sleep 1
    count=`expr $count + 1`
    if test $count -eq 30
    then
        echo "timed out!"
        exit 1
    fi
done

Это будет остановлено, если счетчик достигнет 30 (30 секунд ожидания плюс время, необходимое для проверки доступности файла), после чего будет выведено сообщение об ошибке «Превышено время ожидания!».

--- Обновление: в случае перехода на systemd

При использовании systemd раздел Unit поддерживает:

ConditionPathIsMountPoint=/mnt/over-there

, который выполняет то же самое, что и приведенный выше сценарий, без тайм-аута. Этот оператор предотвращает запуск вашей команды до тех пор, пока не будет установлено монтирование.

count=0
while ! test -f /mnt/over-there/this/file/here
do
    sleep 1
    count=`expr $count + 1`
    if test $count -eq 30
    then
        echo "timed out!"
        exit 1
    fi
done

Это будет остановлено, если счетчик достигнет 30 (30 секунд ожидания плюс время, необходимое для проверки доступности файла), после чего будет выведено сообщение об ошибке «Превышено время ожидания!».

--- Обновление: в случае перехода на systemd

При использовании systemd раздел Unit поддерживает:

ConditionPathIsMountPoint=/mnt/over-there

, который выполняет то же самое, что и приведенный выше сценарий, без тайм-аута. Этот оператор предотвращает запуск вашей команды до тех пор, пока не будет установлено монтирование.

9
ответ дан 3 December 2019 в 02:25

Поскольку целевой каталог может присутствовать, но не монтироваться, я предпочитаю simonpw тест на / proc / mounts

if ! grep -qs '/the/mounted/dir' /proc/mounts; then
5
ответ дан 3 December 2019 в 02:25

Теги

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