У меня есть файловая система удаленного сервера, которую я пытаюсь смонтировать локально на машине FreeBSD 9 через FUSE sshfs и Cron для процедуры резервного копирования. У меня есть ssh-ключи между настройками ящиков, чтобы разрешить беспарольный вход в качестве пользователя root на локальном компьютере.
Cron настроен на запуск следующего скрипта (в crontab Root):
#!/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 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
в этом случае. Это также кажется странным, учитывая, что пути кажутся правильными.
Я также попытался сравнить результат env
на оболочке с env
вставлен в скрипт. Я не вижу переменных среды, которые должны вызывать эту проблему. При загрузке FUSE сообщает свою версию как:
fuse4bsd: version 0.3.9-pre1, FUSE ABI 7.8
Помогите мне мастера ServerFault, вы моя единственная надежда!
Оказывается, причиной этой проблемы была переменная среды $ PATH. Измененный скрипт выше установил PATH идентично оболочке, и теперь он работает без проблем:
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin"
export PATH
Думаю, урок состоит в том, чтобы никогда не делать никаких предположений о минимальной среде Cron.