На этот вопрос уже есть ответ здесь:
У меня установлена консольная утилита. Он находится в / usr / local / bin / my_utility
. Я могу назвать его my_utility
, и он хорошо работает. Я создал задачу cron, которая запускает сценарий bash. Этот сценарий bash вызывает my_utility
. Ошибка, которая возникает только тогда, когда я могу запустить сценарий bash через cron, это «my_utility: команда не найдена».
Почему не найдено? Непосредственный запуск сценария bash работает хорошо. Также скрипт использует другой env. переменные без сбоев.
Система просматривает каталоги в PATH
, чтобы найти исполняемые файлы, если вы не укажете полный путь. Таким образом, это почти наверняка потому, что переменная PATH
, используемая cron, не включает / usr / local / bin /
.
Также возможно, что эта утилита является сценарием, и не указывает полный путь к своему интерпретатору в первой ( #!
) строке. Если путь к этому интерпретатору находится в вашем PATH
при входе в систему, но не в PATH
cron, то вы столкнетесь с аналогичной проблемой.
В целом считается хорошей практикой. всегда используйте полный путь в сценариях, запускаемых из cron, поскольку cron может иметь другие настройки для PATH
. Альтернативой является вызов вашего скрипта из cron как / full / location / of / script
и установка нового значения для PATH
в скрипте.
Мы получаем эту ошибку. во FreeBSD, потому что cron по умолчанию не выполняет поиск в / usr / local
, тогда как большинство (если не все?) дистрибутивы Linux делают это.