我希望在从暂停状态恢复时通过 sshfs 自动挂载某个网络目录。使用来自另一个 AU 的信息邮政,我已通过 中的脚本(部分)运行该脚本/lib/systemd/system-sleep/
。我可以在退出该脚本时将本地挂载点的内容记录到文件中(带有时间戳),并查看远程目录是否已正确挂载。但是,当我在终端中手动检查时,挂载点为空。我可以使用 重新运行该脚本,sudo /lib/systemd/system-sleep/20-sshfs post
它再次正确挂载。
看来 sshfs 命令做从恢复脚本开始工作,但目录随后立即被卸载。我如何找出原因?我在/var/log
Ubuntu 20.04 下没有找到任何有用的东西。
编辑:添加脚本。
#!/bin/bash
# Run sshfs command after resume
case "$1" in
post)
counter=0
initdircontents=$(ls -A /opt/sbc/sysroot)
# Space needed after the [[ !
while [[ -z "$(ls -A /opt/sbc/sysroot)" ]]; do
# Make sure user_allow_other is uncommented in /etc/fuse.conf!
# https://superuser.com/a/262800/
# Then, the -o allow_other below is required! This lets users
# access the mount even if root has mounted it.
sshfs -o transform_symlinks -o allow_other -o ssh_command="sshpass -p passwd ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" [email protected]:/ /opt/sbc/sysroot
dircontents=$(ls -A /opt/sbc/sysroot)
((counter++))
if [[ "$counter" -eq 4 ]]; then
break
fi
sleep 0.5
done
echo -e "sshfs resumed at $(date).\nInitial dir contents: $initdircontents\nAfter ssfhs: $dircontents\ncounter = $counter\n" > /home/dqbydt/sshfs.log
echo -e "Dir contents at script exit: $(ls -A /opt/sbc/sysroot)" >> /home/dqbydt/sshfs.log
;;
esac
while 循环是为了解决另一个潜在的不相关问题,但与此问题无关,从日志文件中可以看出:
$ cat sshfs.log
sshfs resumed at Wed 14 Dec 2022 08:32:17 PM.
Initial dir contents:
After ssfhs: bin
boot
dev
etc
home
lib
lost+found
media
mnt
opt
proc
resize.log
root
run
sbin
snap
srv
sys
tmp
usr
var
counter = 1
Dir contents at script exit: bin
boot
dev
etc
home
lib
lost+found
media
mnt
opt
proc
resize.log
root
run
sbin
snap
srv
sys
tmp
usr
var
您可以看到计数器为 1,这意味着它只经历了一次循环。初始目录内容为空。运行 sshfs 后,它已映射远程目录。脚本退出时,这仍然存在。然而,在恢复之后,如果我执行ls -la /opt/sbc/sysroot
,它是空的。