Вызов утилиты по имени без полного пути из cron не работает [дубликат]

На этот вопрос уже есть ответ здесь:

У меня установлена ​​консольная утилита. Он находится в / usr / local / bin / my_utility . Я могу назвать его my_utility , и он хорошо работает. Я создал задачу cron, которая запускает сценарий bash. Этот сценарий bash вызывает my_utility . Ошибка, которая возникает только тогда, когда я могу запустить сценарий bash через cron, это «my_utility: команда не найдена».

Почему не найдено? Непосредственный запуск сценария bash работает хорошо. Также скрипт использует другой env. переменные без сбоев.

-1
задан 15 November 2017 в 16:52
1 ответ

Система просматривает каталоги в PATH , чтобы найти исполняемые файлы, если вы не укажете полный путь. Таким образом, это почти наверняка потому, что переменная PATH , используемая cron, не включает / usr / local / bin / .

Также возможно, что эта утилита является сценарием, и не указывает полный путь к своему интерпретатору в первой ( #! ) строке. Если путь к этому интерпретатору находится в вашем PATH при входе в систему, но не в PATH cron, то вы столкнетесь с аналогичной проблемой.

В целом считается хорошей практикой. всегда используйте полный путь в сценариях, запускаемых из cron, поскольку cron может иметь другие настройки для PATH . Альтернативой является вызов вашего скрипта из cron как / full / location / of / script и установка нового значения для PATH в скрипте.

Мы получаем эту ошибку. во FreeBSD, потому что cron по умолчанию не выполняет поиск в / usr / local , тогда как большинство (если не все?) дистрибутивы Linux делают это.

1
ответ дан 5 December 2019 в 19:41

Теги

Похожие вопросы