Cron
在 FreeBSD 9.0 上由 Cron 呼叫時,掛載 fuse sshfs 失敗
我有一個遠端伺服器文件系統,我試圖通過 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
在這種情況下收到。考慮到路徑似乎是正確的,這似乎更奇怪。我還嘗試將
env
shell 上的輸出與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 環境做出任何假設。