在 FreeBSD 9.0 上通过 Cron 调用时安装 fuse sshfs 失败

在 FreeBSD 9.0 上通过 Cron 调用时安装 fuse sshfs 失败

我有一个远程服务器文件系统,我正尝试通过 FUSE sshfs 和 Cron 将其本地挂载到 FreeBSD 9 机器上,以执行备份例程。我在两个机器之间设置了 ssh 密钥,允许在本地机器上以 root 用户身份进行无密码登录。

Cron设置为运行以下脚本(在Root的crontab中):

#!/bin/sh

echo "Mounting Share"

/usr/local/bin/sshfs -C -o reconnect -o idmap=user -o workaround=all <remote user>@<remote domain>.com: /mnt/remote_server

作为 root,我可以在命令行中毫无问题地运行此脚本,并且无需输入密码,共享即可成功挂载。但是,当由 Cron 运行时,脚本会失败。sshfs 的路径与which sshfs

以下是 root 从 Cron Daemon 收到的电子邮件:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

Mounting Share
fuse: failed to exec mount program: No such file or directory
fuse: failed to mount file system: No such file or directory

我很困惑为什么我会No such file or directory在这种情况下收到。考虑到路径看起来是正确的,这似乎很奇怪。

我还尝试将envshell 上的输出与env插入到脚本中的输出进行比较。我没有看到任何会导致此问题的环境变量。在启动时,FUSE 将其版本报告为:

fuse4bsd: version 0.3.9-pre1, FUSE ABI 7.8

帮助我,ServerFault 向导,你是我唯一的希望!

答案1

事实证明,$PATH 环境变量是导致此问题的原因。修改上面的脚本,将 PATH 设置与 shell 相同,现在它可以正常工作:

 PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/‌​root/bin"   
 export PATH 

我想教训是永远不要对最小的 Cron 环境做出任何假设。

相关内容