Почему моя работа cron не может найти определенную команду?
Я использую двуличность для создания ночных резервных копий моего сервера по FTP. Я написал сценарий, который выполняет как локальное, так и удаленное резервное копирование и регистрирует результаты вывода. Когда я запускаю этот скрипт от имени пользователя root, он выполняется просто отлично. Однако, когда я устанавливаю его как задание cron и запускаю его, скрипт выполняется, но часть ftp завершается ошибкой. Вскоре после того, как я получаю сообщение об ошибке "ncftpls - команда не найдена, пожалуйста, установите ncftp 3.1.9 или более позднюю версию", но она установлена! Есть ли какая-то причина, по которой заданию cron не удалось найти команду, существующую на компьютере? У него есть собственный PATH или что-то в этом роде?
Любая помощь очень ценится,
Майк
2 ответа
Вы используете абсолютные пути? Задания Cron не будут открывать интерактивную оболочку, поэтому скрипты bash init (bashrc, bash_profile и т. Д.), Которые обычно устанавливают PATH, могут не запускаться - и если они будут, они будут использовать root, а не ваши. Если вы не уверены, где находится команда, вы можете использовать which <command>
выяснить абсолютный путь.
При работе со сценариями cron общее эмпирическое правило заключается в том, что вы либо (а) хотите установить PATH, либо (б) использовать абсолютные пути.
Удачи!
Вы должны либо указать полный путь к команде, которую хотите запустить, либо определить 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
еще несколько примеров.