Cron

在 FreeBSD 9.0 上由 Cron 呼叫時,掛載 fuse sshfs 失敗

  • October 24, 2012

我有一個遠端伺服器文件系統,我試圖通過 FUSE sshfs 將其本地安裝在 FreeBSD 9 機器上,並使用 Cron 進行備份程序。我在設置的框之間有 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

這是根從 Cron 守護程序收到的電子郵件:

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嚮導,你是我唯一的希望!

事實證明 $PATH 環境變數是導致此問題的原因。修改了上面的腳本,將 PATH 設置為與 shell 相同,現在它可以正常工作了:

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

我想教訓是永遠不要對最小的 Cron 環境做出任何假設。

引用自:https://serverfault.com/questions/430669