Назад | Перейти на главную страницу

Почему моя работа cron не может найти конкретную команду?

Я использую дублирование для создания еженощных резервных копий моего сервера через 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 еще несколько примеров.