这是一个奇怪的错误,我不知道它来自哪里。 这是我正在做的事情的一个快速运行。
我正尝试使用s3fs(亚马逊上的FUSE)将FUSE驱动器挂载到运行Ubuntu 10.10的Amazon EC2实例。 s3fs根据指令等从源代码编译。我还添加了一个入口/ etc / fstab,以便在启动时挂载驱动器。 以下是/etc/fstab外观:
# /etc/fstab: static file system information. # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 LABEL=uec-rootfs / ext4 defaults 0 0 /dev/sda2 /mnt auto defaults,nobootwait,comment=cloudconfig 0 2 /dev/sda3 none swap sw,comment=cloudconfig 0 0 s3fs#mybucket /mnt/s3/mybucket fuse default_acl=public-read,use_cache=/tmp,allow_other 0 0
所以好消息是,这工作正常。 重新启动时,连接正确安装。 我也可以这样做:
$ sudo umount /mnt/s3/mybucket $ sudo mount -a $ mountpoint /mnt/s3/mybucket /mnt/s3/mybucket is a mountpoint
很好,对吧?
那么这是问题。 我正在使用Fabric来自动化构build和pipe理此实例的过程。 我注意到当使用Fabric来构builds3fs并设置安装过程时,我收到了这个错误消息:
mountpoint: /mnt/s3/mybucket: Transport endpoint is not connected
我把这个问题孤立起来,并build立了一个能够重现问题的结构任务:
def remount_s3fs(): sudo("mount -a")
其中:
[ec2-xx-xx-xx-xx.compute-1.amazonaws.com] Executing task 'remount_s3fs' [ec2-xx-xx-xx-xx.compute-1.amazonaws.com] sudo: mount -a
[是的,在运行这个任务之前我确定要卸载它。]当我使用mountpoint检查mount时,我得到:
$ mountpoint /mnt/s3/mybucket mountpoint: /mnt/s3/mybucket: Transport endpoint is not connected Done.
但是,如果我在命令行上运行sudo mount -a ,它就可以工作。 人力资源pipe理。
这里是那个fab任务再次输出,这次是完全debugging模式:
[ec2-xx-xx-xx-xx.compute-1.amazonaws.com] Executing task 'remount_s3fs' [ec2-xx-xx-xx-xx.compute-1.amazonaws.com] sudo: sudo -S -p 'sudo password:' /bin/bash -l -c "mount -a"
再次,我得到的传输端点没有连接错误。 我也尝试复制和粘贴确切的命令运行到我的ssh会话(即sudo -S -p 'sudo password:' /bin/bash -l -c "mount -a" ),它工作正常。
所以…这是我的问题。 有任何想法吗?
好吧,这不总是如何工作… 就像我提出这个问题,我的脑海里一个昏暗的灯泡熄灭,我想起有关织物使用的ptyterminal的一些问题,每隔一段时间造成问题。 发现这是在run()的Fabric文档中:
你可以通过pty = False来放弃在远端创build一个伪terminal,以防某个人出现问题。
好吧,如果我修改我的任务中的sudo语句,如下所示:
sudo("mount -a", pty=False)
一切正常。