4

Я использую Dropbox на своем Ubuntu box, а папка Dropbox присутствует на диске, смонтированном через запись в /etc /fstab. Я сталкиваюсь с небольшим раздражением после каждой перезагрузки. Когда я вхожу в систему, я получаю сообщение об отсутствии папки Dropbox. Однако, когда я на самом деле вошел в систему, папка уже там, так как монтирование завершилось довольно скоро в процессе загрузки.

Когда я просто завершаю запрос, а затем снова запускаю dropbox, все происходит без сбоев.

Итак, мой вопрос - как я могу заставить средство запуска dropbox ждать завершения всех ожидающих монтирования /etc /fstab?

Монтирование NFS находится на том же сервере, что и сервер виртуального жесткого диска Ubuntu (VMWare), поэтому проблема загрузки компьютера и отсутствия общего ресурса крайне маловероятна.

2 ответа2

2

Предполагая, что вы использовали https://www.dropbox.com/download?plat=lnx.x86, а не пакет .deb, возможный способ подождать с запуском Dropbox - это сценарий оболочки. На самом деле, я думаю, что вы использовали пакет .deb, так как вы сказали, что он "пропатчил файловый менеджер". В любом случае, приведенный ниже скрипт должен работать независимо от способа установки.

Насколько я могу видеть, mountall(8) запускается как "выскочка" в Ubuntu (что бы это ни было). Он работает, пока не смонтированы все файловые системы (включая NFS). Мы можем проверить, что он работает или запустить его. Когда этот процесс получает сигнал USR1 , все системы NFS монтируются. Если монтирование mountall успешно, маунталл умрет. Этот скрипт должен быть запущен от имени суперпользователя.

/ USR / местные / бен / раздаточная-ждать монтажа

#!/bin/sh
runas={$1:-root}
mpid=`pidof mountall`
if [ -z "$mpid" ] ; then
        mountall --daemon --no-events -q
        mpid=`pidof mountall`
else
        echo mountall is running, going to notify it to mount nfs shares
fi

kill -USR1 $mpid # see /etc/init/mountall-net.conf and mountall(8)
mpid=`pidof mountall`

while [ -n "$mpid" ]; do
        echo waiting for all mounts
        sleep 30
        kill -USR1 $mpid # see /etc/init/mountall-net.conf and mountall(8)
        sleep 1
        mpid=`pidof mountall`
done

echo should be safe to run dropbox now
exec su $runas -c /home/$runas/.dropbox-dist/dropboxd

Справочная страница рекомендует не полагаться на функциональность mountall , но, учитывая природу "временных решений", я думаю, вы можете использовать это в течение некоторого времени.

И для некоторой интеграции с начальными заданиями Ubuntu:

/etc/init/dropbox.conf

# based on ssh.conf

description     "Dropbox daemon"
env RUNAS=root # use /etc/init/dropbox.override

#start on stopped mountall-net RESULT=ok
start on remote-filesystems
stop on runlevel [!2345]

respawn
respawn limit 10 5
umask 022

# 'sshd -D' leaks stderr and confuses things in conjunction with 'console log'
console none

pre-start script
    test -x /usr/local/bin/dropbox-wait-mount || { stop; exit 0; }
end script

# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
# 'exec' line here instead
exec /usr/local/bin/dropbox-wait-mount $RUNAS || { stop; exit 0; }

/etc/init/dropbox.override

env RUNAS=jaroslav

Этот пример должен запускаться только после монтирования всех сетевых файловых систем, но его также можно запустить вручную:

start dropbox #RUNAS=jaroslav
0

Гораздо проще просто использовать autofs для монтирования nfs, тогда это по требованию, и вам не нужно беспокоиться о синхронизации

вот мой конфиг

$ grep home  /etc/auto.master 
/home2 /etc/auto.home

$ cat /etc/auto.home

dropbox -intr,nfsv4,soft NFS.intranet:/backups/dropbox

$ echo $HOME
/home2/dropbox

$ id
uid=1001(dropbox) gid=1001(dropbox) groups=1001(dropbox)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .