如何解决带有 ansible 的 sshfs 不会给出与在主机上手动运行它相同的结果
我正在为我的服务器做备份。我为此使用 sshfs。当想要备份文件夹时,备份服务器会要求输入密码。这是我的任务(处理程序)的样子:
- name: Mount backup folder
become: yes
expect:
command: "sshfs -o allow_other,default_permissions {{ backup_server.user }}@{{ backup_server.host }}:/ /mnt/backup"
echo: yes
responses:
(.*)password(.*): "{{ backup_server.password }}"
(.*)Are you sure you want to continue(.*): "yes"
listen: mount-backup-folder
它运行并产生以下输出:
changed: [prod1.com] => {
"changed": true,"cmd": "sshfs -o allow_other,default_permissions user@hostname.com:/ /mnt/backup","delta": "0:00:00.455753","end": "2021-01-26 14:57:34.482440","invocation": {
"module_args": {
"chdir": null,"command": "sshfs -o allow_other,"creates": null,"echo": true,"removes": null,"responses": {
"(.*)Are you sure you want to continue(.*)": "yes","(.*)password(.*)": "password"
},"timeout": 30
}
},"rc": 0,"start": "2021-01-26 14:57:34.026687","stdout": "user@hostname.com's password: ","stdout_lines": [
"user@hostname.com's password: "
]
}
但是当我去服务器时,文件夹没有与备份服务器同步。但是当我手动运行命令时:
sshfs -o allow_other,default_permissions user@hostname.com:/ /mnt/backup
备份确实有效。有人知道这怎么可能吗?
解决方法
我怀疑 sshfs
被 SIGHUP
杀死。我对 Ansible 一无所知,所以不知道它是否有忽略 SIGHUP
的官方方法。作为一种解决方法,您可以这样编写:
expect:
command: bash -c "trap '' HUP; sshfs -o ..."
我安装了 sshfs
并使用 Expect (spawn -ignore HUP ...) 和 sexpect 验证了此 bash -c "trap ..."
解决方法(生成 -nohup ...)。我相信它也适用于 Ansible (似乎它的 expect
模块使用 Python 的 pexpect
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。