我在 Ubuntu 机器上使用 Dropbox,Dropbox 文件夹位于通过 /etc/fstab 中的条目挂载的驱动器上。每次重启后我都会遇到一些麻烦。当我登录时,系统会显示一条消息,提示我缺少 dropbox 文件夹。但是,当我实际登录时,文件夹已经存在,因为挂载在启动过程中很快就完成了。
当我简单地退出提示,然后重新启动 Dropbox 时,一切都没有故障。
所以,我的问题是 - 我如何让 dropbox 启动器等待所有待处理的 /etc/fstab 挂载完成?
NFS 挂载与用于服务 Ubuntu 虚拟硬盘(VMWare)的服务器位于同一台服务器上,因此机器启动时没有共享的问题极不可能发生。
答案1
假设你使用https://www.dropbox.com/download?plat=lnx.x86而不是.deb 包,让 dropbox 启动器等待的一种可能方法是使用 shell 脚本。实际上,我认为您使用了 .deb 包,因为您说它“修补了文件管理器”。无论如何,无论采用哪种安装方法,下面的脚本都应该可以工作。
据我所知,mountall(8)
它在 Ubuntu 中作为“upstart 作业”运行(无论它是什么)。它会一直运行,直到所有文件系统(包括 NFS)都已挂载。我们可以检查它是否正在运行或启动它。当USR1该进程收到信号后,所有 NFS 系统都已挂载。如果挂载成功,则mountall
终止。此脚本必须以超级用户身份运行。
/usr/local/bin/dropbox-wait-mount
#!/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
答案2
更简单的方法是使用 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)