Понадобилось мне подмонтировать удаленную папку по sshfs.
Действие само по себе несложное, делается одной командой:sshfs [user@]host:[dir] mountpoint [options]
Но сразу же возникло еще одно условие - папка должна быть доступна всегда (ну, когда она доступна). То есть, по-хорошему, ее надо монтировать при старте системы.
Если сделать это, прописав команду в скрипте /etc/rc.local, то она просто-напросто не выполнится в связи с тем, что данный скрипт выполняется до старта графической среды. Вернее команда выполнится и ругнется на то, что никаких удаленных папок примонтировать не удалось из-за того, что сети-то нет - она поднимется только при старте графической подсистемы.
Такая же точно ситуация сложится и в том случае если прописать монтирование удаленной папки в fstab.
"Печально", - подумал я и решил написать скриптик, который проверял бы текущее состояние подключения к сети и при его наличии монтировал бы папку. Я его даже написал (благо несложный он) и он даже некоторое время поработал. Только вот, удаляя по маске какие-то файлы, я случайно удалил и его.
Переписывать не хотелось, поэтому решил почитать литературу (man interfaces). В итоге выяснил, что существуют так называемые {up/down/pre-up/post-down} скрипты, в которых выполняются определенные действия при {поднятии/опускании/перед-поднятием/после опускания} сетевых интерфейсов. Находятся они в /etc/network/if-up.d, /etc/network/if-down.d, /etc/network/if-pre-up.d, /etc/network/if-post-down.d соответственно. Сами эти скрипты запускаются из диспатчера /etc/NetworkManager/dispatcher.d/01ifupdown командой run-parts.
su user -c "sshfs [user@]:[dir] mountpoint [options]" >/var/log/sshfs.log 2>&1
#!/bin/bash
su user -c "sshfs [user@]:[dir] mountpoint [options]" >/var/log/sshfs.log 2>&1
exit 0
При написании скриптов также можно использовать некоторые специальные переменные, сообщающие нам информацию о подключении. Например, чтобы монтировать папку при подключении сети только по интерфейсу eth0, мы задействуем переменную $IFACE:if [ "$IFACE" = eth0 ]; then
blah-blah-blah
fi
На самом деле, эти переменные задаются как раз в диспатчере, там же, думаю, можно задать свои собственные, которые будут потом использоваться во всех скриптах, запускаемых утилитой run-parts.
**********
Естественно данная история описывает личный опыт, поэтому и получилась довольно обширной, но если ее хорошо выжать, то получим вот что:
/etc/network/if-up.d
/etc/network/if-down.d
/etc/network/if-pre-up.d
/etc/network/if-post-down.d