Почему моя работа 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 еще несколько примеров.

Другие вопросы по тегам