Я использую дублирование для создания еженощных резервных копий моего сервера через FTP. Я написал сценарий, который выполняет как локальное, так и удаленное резервное копирование и регистрирует выходные результаты. Когда я запускаю этот сценарий от имени пользователя root, он работает нормально. Однако, когда я устанавливаю его как задание cron и запускаю, скрипт выполняется, но часть ftp не работает. Вскоре после того, как я получаю сообщение об ошибке «ncftpls - команда не найдена, пожалуйста, установите ncftp 3.1.9 или новее», но она установлена! Есть ли причина, по которой задание cron не может найти команду, существующую на машине? У него есть собственный ПУТЬ или что-то в этом роде?
Любая помощь приветствуется,
Майк
Вы используете абсолютные пути? Задания Cron не открывают интерактивную оболочку, поэтому сценарии инициализации bash (bashrc, bash_profile и т. Д.), Которые обычно устанавливают PATH, могут не запускаться - и если они есть, они будут использовать root, а не ваш. Если вы не знаете, где находится команда, вы можете использовать which <command>
чтобы узнать абсолютный путь.
При работе со сценариями cron общее практическое правило состоит в том, что вы либо (а) хотите установить ПУТЬ, либо (б) использовать абсолютные пути.
Удачи!
Вы должны либо указать полный путь к команде, которую хотите запустить, либо определить PATH
в работе cron.
Пример выполнения команды foobar без указания пути:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
01 * * * * root foobar
С путем:
01 * * * * root /usr/bin/foobar
Вы также можете указать, в какой оболочке запускать задания, установив SHELL
лайк: SHELL=/bin/bash
для баш. Видеть man 5 crontab
еще несколько примеров.